#include<bits/stdc++.h>
#define ll long long
using namespace std;
struct nr
{
int w,val;
}v[100005];
int cmp(nr a,nr b)
{
return 1LL*a.val*b.w>1ll*b.val*a.w;
}
ll dp[300005];
int main()
{
int n,m,curw=0,i,j;
ll rasp=0;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
scanf("%d%d",&v[i].w,&v[i].val);
sort(v+1,v+n+1,cmp);
for(i=1;i<=n;i++)
{
curw=min(curw+v[i].w,m);
for(j=min(m,curw);j>=max(v[i].w,curw-3);j--)
{
dp[j]=max(dp[j],dp[j-v[i].w]+v[i].val);
rasp=max(rasp,dp[j]);
}
}
printf("%lld\n",rasp);
return 0;
}