#include <stdio.h>
using namespace std;
int n ,G ,profit[10001] ,val[10001] ,g[10001] ,i , j;
FILE *fin ,*fout;
int main()
{
fin=fopen("rucsac.in" ,"r");
fout=fopen("rucsac.out" ,"w");
fscanf(fin , "%d%d" ,&n ,&G);
for(i=1;i<=n;i++)
{
fscanf(fin , "%d%d" ,&g[i] ,&val[i]);
}
for(j=1;j<=G;j++) profit[j]=-1;
for(i=1;i<=n;i++)
for(j=G-g[i];j>=0;j--)
{
if(profit[j]!=-1 && profit[j]+val[i]>=profit[j+g[i]]) profit[j+g[i]]=profit[j]+val[i];
}
int pozz ,max=-1;
for(j=1;j<=G;j++)
{
if(profit[j]>max)pozz=j;
}
fprintf(fout ,"%d" ,profit[pozz]);
return 0;
}