#include<bits/stdc++.h>
#define ll long long
#define lson pos<<1
#define rson pos<<1|1
using namespace std;
const int maxn=2e3+50;
const ll mod=1e9+7;
int n,m,t,ans=100,cnt=0;
int dp[maxn*20][maxn],dp1[maxn*20][maxn];
struct node{
int a,b,siz,id;
}q[maxn*100];
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
int j=1;
while(j<=z){
q[++cnt].a=x*j;
q[cnt].b=y*j;
q[cnt].siz=j;
q[cnt].id=i;
z-=j;
j<<=1ll;
}
if(z){
q[++cnt].a=x*z;
q[cnt].id=i;
q[cnt].b=y*z;
q[cnt].siz=z;
}
}
for(int i=1;i<=cnt;i++){
for(int j=0;j<=q[i].a;j++){
dp[i][j]=dp[i-1][j];
}
for(int j=q[i].a;j<=1000;j++){
dp[i][j]=max(dp[i-1][j],dp[i-1][j-q[i].a]+q[i].b);
}
}
for(int i=cnt;i>=1;i--){
for(int j=0;j<=q[i].a;j++){
dp1[i][j]=dp1[i+1][j];
}
for(int j=q[i].a;j<=1000;j++){
dp1[i][j]=max(dp1[i+1][j],dp1[i+1][j-q[i].a]+q[i].b);
}
}
scanf("%d",&m);
while(m--){
int x,y;
int ans=0;
scanf("%d%d",&x,&y);
x++;
int l=0,r;
while(q[l+1].id<x&&l<cnt) l++;
r=l;
while(q[r+1].id<=x&&r<cnt) r++;
r++;
for(int i=0;i<=y;i++){
ans=max(dp[l][i]+dp1[r][y-i],ans);
}
printf("%d\n",ans);
}
return 0;
}