Descrition:
Accept:
#include<bits/stdc++.h>
using namespace std;
const int maxn = 10010;
int w[maxn], v[maxn], n, b, dp[1010][10010];
int f(int ind, int curweight)//ind 0 -N, curweight 0- b
{
if (curweight > b) {
/*cout << ind << endl;*/
return -1;
}
if (ind == n)return 0;
if (dp[ind][curweight] != -1)return dp[ind][curweight];
int ans2 = f(ind + 1, curweight + w[ind]);
int ans1 = f(ind + 1, curweight);
if (ans1 == -1)return ans2;
else if (ans2 == -1)return ans1;
int ans= max(ans1, ans2 + v[ind]);
dp[ind][curweight] = ans;
return ans;
}
int g()
{
return 0;
}
int main()
{
cin >> n >> b;
memset(w, 0, sizeof(w));
memset(v, 0, sizeof(v));
memset(dp, -1, sizeof(dp));
for (int i = 0; i < n; i++)cin >> w[i] >> v[i];
int res = f(0, 0);
cout << res << endl;
return 0;
}