1 #include <bits/stdc++.h>
2 using namespace std;
3 int n;
4 int a[1010],t[1010],w[1010];
5 int dp[200010];
6 struct node
7 {
8 int l,r,value;
9 }num[100010];
10 int cmp(node x,node y)
11 {
12 if(x.l == y.l)
13 return x.r<y.r;
14 return x.l<y.l;
15 }
16 int vis[100010];
17 int main()
18 {
19 int T;
20 scanf("%d%d",&n,&T);
21 for(int i = 1; i <= n; i++)
22 {
23 scanf("%d%d%d",&t[i],&a[i],&w[i]);
24 if(w[i]==-1)
25 vis[i] = -1;
26 if(w[i]==1)
27 vis[i] = 1;
28 }
29 for(int i = 1; i<= n; i++)
30 {
31 if(vis[i] == -1)
32 {
33 for(int j = t[i]; j <= T; j++)
34 {
35 dp[j] = max(dp[j],dp[j-t[i]]+a[i]);
36 }
37 }
38 else
39 {
40 int x = w[i],k;
41 for(k = 1;k <= x; k<<=1)
42 {
43 for(int j = T; j >= k*t[i]; j--)
44 dp[j] = max(dp[j],dp[j-k*t[i]]+k*a[i]);
45 x-=k;
46 }
47 if(x!=0)
48 {
49 for(int j = T; j >= x*t[i]; j--)
50 {
51 dp[j] = max(dp[j],dp[j-x*t[i]]+x*a[i]);
52 }
53 }
54 }
55 }
56 cout<<dp[T]<<endl;
57 return 0;
58 }