#include <iostream>
using namespace std; //01背包问题
int w[5]={2,2,6,5,4}; //物品重量
int v[5]={5,3,5,3,2}; //物品价值
int m[5][5]; //可选 i到n 物品时 的放入背包的最优子结构
int main(){
int n[5]={2,2,6,5,4}; //物品数量
int c=10; //背包容量
cin>>n;
cin>>c;
for(int i=1;i<=n;i++){
cin>>w[i]>>v[i];
}
for(int i=0;i<=n;i++){
m[i][0]=0;
}
for(int j=0;j<=c;j++){
m[0][j]=0;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=c;j++){
if(j<w[i]) //放不下
m[i][j]=m[i-1][j];
else //放得下
m[i][j]=max(m[i-1][j],m[i-1][j-w[i]]+v[i]); //比较 放与不放 的价值
}
}
cout<<m[n][c]<<endl;
}