#include #include #include #include using ll=long long; using namespace std; int n,m,k; int cost[25]; int cw[25][25]; int vw[25][25]; int dp[1006][22][3]; int rec(int money_left, int at, bool locked) { if(at == -1 or money_left == 0) { return 0; } if(dp[money_left][at][locked] != -1) { return dp[money_left][at][locked]; } int result = 0; result = max(result, rec(money_left, at - 1, true)); if(locked) { int spend = money_left - cost[at]; if(spend >= 0) { for(int j = 0; j < m; j++) { int tmp_spend = spend - cw[at][j]; if(tmp_spend >= 0) { result = max(result, rec(tmp_spend, at, false) + vw[at][j]); result = max(result, rec(tmp_spend, at - 1, true) + vw[at][j]); } } } } else { for(int j = 0; j < m; j++) { int spend = money_left - cw[at][j]; if(spend >= 0) { result = max(result, rec(spend, at, locked) + vw[at][j]); result = max(result, rec(spend, at - 1, true) + vw[at][j]); } } } return dp[money_left][at][locked] = result; } int main() { int t; cin>>t; while(t--) { memset(dp,-1,sizeof dp); cin>>n>>m>>k; for(int i=0;i>cost[i]; } for(int i=0;i> cw[i][j]; } } for(int i = 0; i < n; i++) { for(int j =0 ; j < m; j++) { cin >> vw[i][j]; } } cout<