#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#define int long long
using namespace std;
int t, n, m;
struct Node {
int tt, dd, ww;
}lst[5500];
struct node {
int t, d, w;
}lsta[5500];
int f[5550];
bool cmp(node x, node y){
if (x.d!=y.d) return x.d<y.d;
if (x.t!=y.t) return x.t < y.t;
if (x.w!=y.w) return x.w > y.w;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> t;
while (t--){
memset(f,0,sizeof f);
int m = 0;
int T = 0;
cin >> n;
int k=1;
for (int i = 1; i <= n; i++) {
cin >> lst[i].tt >> lst[i].dd >> lst[i].ww;
if(lst[i].dd>=lst[i].tt){
lsta[k].t=lst[i].tt,lsta[k].d=lst[i].dd,lsta[k].w=lst[i].ww;
k++;
}
}
k--;
n=k;
sort(lsta + 1, lsta + 1 + n, cmp);
for (int i = 1; i <= n; i++)
{
for (int j = lsta[i].d; j >=lsta[i].t; j--)
{
f[j] = max(f[j], f[j - lsta[i].t] + lsta[i].w);
}
}
int mmax = 0;
for (int i = 0; i <= 5005; i++) {
mmax=max(mmax, f[i]);
}
cout << mmax << endl;;
}
return 0;
}