#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n,m,pos;
struct P{
int w,val;
}p[101000];
bool cmp(P p1,P p2){
return (ll)p1.val*p2.w > (ll)p2.val*p1.w;
}
ll f[301000],ans;
int main(){
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++) scanf("%d%d",&p[i].w,&p[i].val);
sort(p+1,p+n+1,cmp);
for (int i=1;i<=n;i++){
pos=min(pos+p[i].w,m);
for (int j=min(m,pos+10);j>=max(p[i].w,pos-100);j--){
f[j]=max(f[j],f[j-p[i].w]+p[i].val);
ans=max(ans,f[j]);
}
}
printf("%I64d",ans);
}