#include <iostream>
#include <cstring>
using namespace std;
int max(int i,int j)
{
if(i>j) return i;
else return j;
}
int main()
{
int v[101]; //物品价值
int w[101]; //物品重量
int i;
int m[101][1001]; //中间数组
int n,c; // n为物品数量 c为背包大小
cin>>n>>c;
for(i=1;i<=n;i++)
{
cin>>w[i]>>v[i];
}
memset(m,0,sizeof(m));
for(i=1;i<=n;i++)
{
for(int j=1;j<=c;j++)
{
if(j>=w[i])
m[i][j]=max( m[i-1][j] , m[i-1][ j-w[i] ] +v[i] );
else
m[i][j]=m[i-1][j];
}
}
cout<<m[n][c]<<endl;
return 0;
}