← Home
#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;
}