#include using namespace std; long long wt[105], val[105]; long long dp[105][10005]; long long func(int index, int wt_left) { if(wt_left==0) return 0; if(index<0) return 0; if(dp[index][wt_left]!=-1) return dp[index][wt_left]; long long ans = func(index-1, wt_left); if(wt_left-wt[index]>=0) ans = max(ans, func(index-1, wt_left-wt[index]) + val[index]); return dp[index][wt_left] = ans; } int main() { memset(dp,-1,sizeof(dp)); long long n,w; cin >> n >> w; for(int i=0; i> wt[i] >> val[i]; } cout << func(n-1, w); }