#include #include #include using namespace std; int t, n, w, weights[101], values[101], dp[101][101]; void in() { scanf("%d %d", &n, &w); for (int i = 0; i < n; i++) scanf("%d", &values[i]); for (int i = 0; i < n; i++) scanf("%d", &weights[i]); } int solve(int i, int weight) { if (i == n) return 0; if (dp[i][weight] != -1) return dp[i][weight]; if (weight + weights[i] > w) return dp[i][weight] = solve(i + 1, weight); return dp[i][weight] = max(values[i] + solve(i + 1, weight + weights[i]), solve(i + 1, weight)); } void solveAllTests() { for (int q = 0; q < t; q++) { in(); memset(dp, -1, sizeof(dp)); printf("%d\n", solve(0, 0)); } } int main() { scanf("%d", &t); solveAllTests(); return 0; } /* 3 3 4 1 2 3 4 5 1 3 6 1 2 3 1 2 3 3 3 1 2 3 10 11 12 */