#include #include #include using namespace std; struct Node { int a, b, c; bool operator < (const Node &d) const { return b * d.c > c * d.b; } }; Node A[1010]; int dp[1010][3010]; int main(void) { int T; scanf("%d", &T); while (T -- > 0) { int n, t; scanf("%d %d", &n, &t); for (int i = 1; i <= n; ++ i) { scanf("%d %d %d", &A[i].a, &A[i].b, &A[i].c); } sort(A + 1, A + n + 1); int ret = 0; for (int i = 1; i <= n; ++ i) { for (int j = 0; j <= t; ++ j) dp[i][j] = dp[i-1][j]; for (int j = 0; j <= t; ++ j) if (j >= A[i].c) { dp[i][j] = max(dp[i][j], dp[i-1][j-A[i].c] + A[i].a - A[i].b * j); ret = max(ret, dp[i][j]); } } printf("%d\n", ret); } return 0; }