#include<bits/stdc++.h>
using namespace std;
#define endl "\n"
#define out(x) #x <<" = "<<x<<"; "
const long long MAX = 2010, MAXC = 110;
int n, m, a, b, c;
long long dp[2][MAX][MAXC], ans;
struct Comp{
int cores, f, v;
inline friend bool operator < (Comp a, Comp b){
return a.f < b.f;
}
}comp[MAX];
struct Queries{
int cores, f, v, ind;
inline friend bool operator < (Queries a, Queries b){
return a.f < b.f;
}
}q[MAX];
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin>>n;
for(int i = 1; i <= n; i++){
cin>>comp[i].cores>>comp[i].f>>comp[i].v;
}
sort(comp + 1, comp + 1 + n);
comp[n + 1] = {0, int (1e9), int (1e9)};
cin>>m;
for(int i = 1; i <= m; i++){
cin>>q[i].cores>>q[i].f>>q[i].v;
q[i].ind = i;
}
sort(q + 1, q + 1 + m);
for(int i = 1; i <= m; i++){
for(int j = 1; j <= n; j++){
for(int k = 0; k <= 100; k++){
dp[i % 2][j][k] = 0;
dp[i % 2][j][k] = max(dp[(i - 1) % 2][j][k], dp[i % 2][j - 1][k]);
if(q[i].f <= comp[j].f){
if(k >= q[i].cores) dp[i % 2][j][k] = max(dp[i % 2][j][k], dp[(i - 1) % 2][j][k - q[i].cores] + q[i].v);
}
if(k + comp[j - 1].cores <= 100 and j>1) dp[i % 2][j][k] = max(dp[i % 2][j][k], dp[i % 2][j - 1][k + comp[j - 1].cores] - comp[j - 1].v);
//ans = max (ans, dp[i % 2][j][k]);
}
}
}
cout<<max(dp[m%2][n][0],dp[m%2][n][comp[n].cores]-comp[n].v);
return 0;
}