#include
#include
#include
using namespace std;
const int N = 1010;
int n, m;
int v[N], w[N];
int f[N];
int g[N];
int main()
{
scanf("%d %d", &n, &m);
for (int i = 1; i = 1; i--)
// {
// for (int j = 0; j = v[i])
// {
// g[j] = max(f[j], f[j - v[i]] + w[i]);
// }
// }
// memcpy(f, g, sizeof g);
// }
// cout= v[i])
// {
// g[j] = max(f[j], f[j - v[i]] + w[i]);
// }
// }
// memcpy(f, g, sizeof g);
// }
// cout = 0; j--)
// {
// if (j >= v[i])
// {
// f[j] = max(f[j], f[j - v[i]] + w[i]);
// }
// }
// }
// cout = 1; i--)
{
for (int j = m; j >= 0; j--)
{
if (j >= v[i])
{
f[j] = max(f[j], f[j - v[i]] + w[i]);
}
}
}
cout
using namespace std;
const int N = 1010;
int n, m;
int v[N], w[N];
int mem[N][N];
int f[N][N];
int g[N];
int dfs(int x, int spV)
{
if (mem[x][spV])
return mem[x][spV];
int sum = 0;
if (x > n)
sum = 0;
else if (spV > n >> m;
for (int i = 1; i > v[i] >> w[i];
// int res=dfs(1,m);
// cout
using namespace std;
const int N = 1010;
int n, V, M;
int v[N], m[N], w[N];
int mem[N][110][110];
int f[N][110][110];
int g[110][110];
int dfs(int x, int spV, int spM)
{
if (mem[x][spV][spM])
return mem[x][spV][spM];
int sum = 0;
if (x > n)
sum = 0;
else if (spV > n >> V >> M;
for (int i = 1; i > v[i] >> m[i] >> w[i];
// int res=dfs(1,V,M);
// cout= 1; i--)
// for (int j = 0; j = v[i]; j--)
// for (int k = M; k >= m[i]; k--)
// {
// g[j][k] = max(g[j][k], g[j - v[i]][k - m[i]] + w[i]);
// }
// cout = 1; i--)
for (int j = V; j >= v[i]; j--)
for (int k = M; k >= m[i]; k--)
{
g[j][k] = max(g[j][k], g[j - v[i]][k - m[i]] + w[i]);
}
cout << g[V][M] << endl;
return 0;
}