#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n, q, a, b;
int co[505], fr[505], be[505];
ll f[505][505];
int main() {
scanf("%d%d", &n, &q);
for (int i = 1; i <= n; i++) {
scanf("%d%d%d", &co[i], &fr[i], &be[i]);
}
memset(f, 0xc0, sizeof(f));
f[0][0] = 0;
for (int i = 1; i <= n; i++) {
for (int j = 500; j >= 0; j--) {
for (int k = 500; k >= co[i]; k--) {
f[j][k] = max(f[j][k], f[max(0, j - fr[i])][k - co[i]] + be[i]);
}
for (int k = 1; k <= 500; k++) {
f[j][k] = max(f[j][k], f[j][k - 1]);
}
}
}
while (q--) {
scanf("%d%d", &a, &b);
printf("%lld\n", f[b][a] > 0 ? f[b][a] : 0);
}
return 0;
}
每个测试点大约差 0.05s。