#include<bits/stdc++.h>
using namespace std;
#define N 300005
#define int long long
#define re register
#define inl inline
#define rep(i,l,r) for(re int i=l;i<=r;i++)
template <typename T> inl T read(){
T ret=0;bool p=1;char c=getchar();
while(!isdigit(c)){if(c=='-') p=0;c=getchar();}
while(isdigit(c)){ret=(ret<<3)+(ret<<1)+(c-'0');c=getchar();}
if(p) return ret;
else return ~(ret-1);
}
template <typename T>inl void write(T x){
static int sta[50];int top=0;
if(x<0){putchar('-');x=~(x-1);}
while(x){
sta[++top]=x%10;x/=10;
}
if(!top) sta[++top]=0;
while(top){putchar(sta[top--]+'0');}
putchar('\n');
return;
}
struct node{
int v,w,id;
}a[N];
int f[1005][1005],f2[1005][1005],n,m,tot;
int cn,V;
signed main(){
cin>>n;
int idx=0;
for(int cw,cv,c,i=1;i<=n;i++){
cw=read<int>();cv=read<int>();c=read<int>();
int now=1;
while(now<=c){
a[++tot].w=cw*now,a[tot].v=cv*now;
a[tot].id=i;
c-=now,now*=2;
}
if(c){
a[++tot].w=cw*c,a[tot].v=cv*c;
a[tot].id=i;
}
}
n=tot;
cin>>m;
for(int i=1;i<=n;i++){
for(int j=0;j<=1000;j++) f[i][j]=f[i-1][j];
for(int j=1000;j>=a[i].w;--j){
f[i][j]=max(f[i][j],f[i-1][j-a[i].w]+a[i].v);
}
}
for(int i=n;i>=1;--i){
for(int j=0;j<=1000;j++) f2[i][j]=f2[i+1][j];
for(int j=1000;j>=a[i].w;--j){
f2[i][j]=max(f2[i][j],f2[i+1][j-a[i].w]+a[i].v);
}
}
for(int k=1;k<=m;k++){
int ans=0;
cn=read<int>()+1;V=read<int>();
int l=0,r=0;
while(a[l+1].id<cn&&l<n) l++;
r=l;
while(a[r+1].id==cn&&r<n) r++;
for(int j=0;j<=V;j++){
ans=max(ans,f[l][j]+f2[r+1][V-j]);
}
write(ans);
}
return 0;
}