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 }