1 #include <iostream>
2 #include <vector>
3 #include <algorithm>
4 #include <cstring>
5
6 #define MAX 1001
7 using namespace std;
8
9 struct cloth{
10 int xi,yi,ci;
11 };
12 int dp[MAX][MAX]={0};
13
14 int main(){
15 int T;
16 cin >> T;
17 while(T--){
18 int N,X,Y;
19 cin >> N>>X>>Y;
20 vector<cloth> piece(N);
21 for(int i = 0; i < N; i ++ )
22 cin >> piece[i].xi>>piece[i].yi>>piece[i].ci;
23 // int dp[MAX][MAX]={0}; //不知道为什么把dp放在里面会栈溢出
24 memset(dp,0,sizeof(dp));
25 for(int i = 1; i <= X; i ++ ){
26 for(int j = 1; j <= Y; j ++ ){
27 for(int k = 0; k < N; k ++ ){
28 int x = piece[k].xi, y = piece[k].yi, c = piece[k].ci;
29 if(i >= x && j >=y )
30 dp[i][j] = max(dp[i][j],max(dp[i-x][y]+dp[i][j - y],dp[x][j-y]+dp[i-x][j])+c);
31 swap(x,y);
32 if(i >=x && j >= y)
33 dp[i][j] = max(dp[i][j],max(dp[i-x][y]+dp[i][j - y],dp[x][j-y]+dp[i-x][j])+c);
34 }
35 }
36 }
37 cout<<dp[X][Y]<<endl;
38 }
39 return 0;
40 }