dp[a][b][k] = max{dp[a][b][k-1] + vi,
dp[a-i][b][k] + vi,
dp[a][b-j][k] + vi}
dp[a-i][b][k] + vi,
dp[a][b-j][k] + vi}
#include <stdio.h>
#include <string.h>
int dp[105][105][10];
int main()
{
int n, v1, v2, K;
int a, b, val;
while(~scanf("%d%d%d%d", &n, &v1, &v2, &K))
{
memset(dp, 0, sizeof(dp));
while(n--)
{
scanf("%d%d%d", &a, &b, &val);
for(int i = v1; i >= 0; --i)
{
for(int j = v2; j >= 0; --j)
{
for(int k = K; k >= 0; --k)
{
int max = 0;
if((i > 0) && (max < dp[i - 1][j][k])) max = dp[i - 1][j][k];
if((j > 0) && (max < dp[i][j - 1][k])) max = dp[i][j - 1][k];
if((k > 0) && (max < dp[i][j][k - 1])) max = dp[i][j][k - 1];
if(dp[i][j][k] < max) dp[i][j][k] = max;
if((k > 0) && (max < dp[i][j][k - 1] + val)) max = dp[i][j][k - 1] + val;
if((i >= a) && (max < dp[i - a][j][k] + val)) max = dp[i - a][j][k] + val;
if((j >= b) && (max < dp[i][j - b][k] + val)) max = dp[i][j - b][k] + val;
if(dp[i][j][k] < max) dp[i][j][k] = max;
}
}
}
}
printf("%d\n", dp[v1][v2][K]);
}
return 0;
}