#include <iostream>
#include <algorithm>
#include <cstdio>
#include <string.h>
using namespace std;
const int INF = 99999999;
struct node{
int x;
int y;
int z;
};
node a[4005];
int dp[400000];
int Count[400005];
bool cmp(node a,node b){
return a.y < b.y ;//玄学排序
}
int main()
{
int n;
cin >> n;
int maxx = -1;
for(int i = 0;i < n;i++){
cin >> a[i].x >> a[i].y >> a[i].z;
//maxx = max(maxx,a[i].y);
}
sort(a,a+n,cmp);
memset(dp,0,sizeof(dp));
for(int i = 0;i < n;i++){
memset(Count,0,sizeof(Count));
for(int j = a[i].x;j <= a[i].y;j++){
if(dp[j-a[i].x] + a[i].x > dp[j] && Count[j-a[i].x]+1 <= a[i].z && dp[j-a[i].x] + a[i].x <= a[i].y){
dp[j] = dp[j-a[i].x] + a[i].x;//多重背包模板
Count[j] = Count[j-a[i].x]+1;
//cout << dp[j] << endl;
}
}
}
bool flag = false;
//cout << maxx << endl;
for(int i = 0;i <= 40000;i++){
if(dp[i] > 0){
maxx = max(maxx,dp[i]);
flag = true;
}
}
if(!flag) cout <<0<< endl;//蜜汁0
else cout << maxx << endl;
return 0;
}
https://vjudge.net/contest/258799#problem/F