/* 4 5 2 3 1 2 3 4 2 2 _____ 7 */ #include<iostream> #define MAX 1000 using namespace std; int max(int n1, int n2){return n1>n2?n1:n2;} int dp[MAX][MAX], n, m, w[MAX], v[MAX]; int rec(int i, int j) { if(dp[i][j]>=0) return dp[i][j]; int res; if(i==n){ res=0; }else if(j<w[i]){ res = rec(i+1, j); }else { res = max(rec(i+1, j), rec(i+1, j-w[i])+v[i]); } return dp[i][j]=res; } int main() { int i, j, ans; cin>>n >> m; for(i=0; i<n; i++) cin>>w[i] >>v[i]; memset(dp, -1, sizeof(dp)); ans = rec(0, m); cout<<ans<<endl; system("pause"); return 0; }