#include #include #include #include #include #include #include #include #include #include #include #include #define X first #define Y second #define mp make_pair #define pb push_back typedef long long ll; using namespace std; const int MOD = 1E9 + 7; const int MAXC = 10100; int dp[111][MAXC + MAXC + 111]; int n, a[111], b[111], c[111], s; int cnt; void rec(int t, int oc, int bal) { if (t == n) { cnt += (bal > 0); } else { for (int i = 0; a[t]*i + oc <= s; i++) { rec(t + 1, oc + a[t]*i, bal + i*(c[t] - b[t]) ); } } } void solve() { cnt = 0; cin>>n>>s; for (int i = 0; i < n; i++) { cin>>a[i]>>b[i]>>c[i]; c[i] = min(c[i], MAXC); } /*rec(0, 0, 0); cout<= -MAXC && will <= MAXC) { dp[i + a[k] ][will + MAXC + 100] += dp[i][j + MAXC + 100]; if (dp[i + a[k] ][will + MAXC + 100] >= MOD) { dp[i + a[k] ][will + MAXC + 100] -= MOD; } } } } } /*for (int k = 0; k < n; k++) { for (int i = 0; i < s; i++) { for (int j = -MAXC; j <= MAXC; j++) { int will = j + c[k] - b[k]; if (i + a[k] <= s && will >= -MAXC && will <= MAXC) { dp[i + a[k] ][will + MAXC + 100] += dp[i][j + MAXC + 100]; dp[i + a[k] ][will + MAXC + 100] %= MOD; } } } }*/ int ans = 0; for (int i = 0; i <= s; i++) { for (int j = 1; j <= MAXC; j++) { ans += dp[i][j + MAXC + 100]; if (ans >= MOD) { ans -= MOD; } } } cout<>test; while (test--) { solve(); } }