#include<bits/stdc++.h>
#define rep(i,j,k) for(register int i(j);i!=(k+1);++i)
#define drp(i,j,k) for(register int i(j);i>=k;--i)
using namespace std;
const int N=3021;
int n;
int cost[N],value[N],num[N];
int f1[2500][2500],f2[2500][2500];
inline void read(int &x)
{
x=0;register char ch=getchar();int w=0;
while(ch>'9'||ch<'0'){w|=ch=='-';ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch&15);ch=getchar();}
w? x=~(x-1):x;
}
int count1,VALUE[380217],COST[380217],bian[380217];
int main()
{
// freopen("bag.in","r",stdin);
// freopen("bag.out","w",stdout);
read(n);
rep(i,0,n-1)
{
read(cost[i]);
read(value[i]);
read(num[i]);
for(int j=1; j<=num[i]; j<<=1)
{
VALUE[count1]=j*value[i];
bian[count1]=i;
COST[count1++]=j*cost[i];
num[i]-=j;
}
if(num[i])
{
VALUE[count1]=num[i]*value[i];
bian[count1]=i;
COST[count1++]=num[i]*cost[i];
}
}
rep(i,0,count1)
{
rep(j,0,1000)f1[i][j]=f1[i-1][j];
drp(j,1000,COST[i])
f1[i][j]=max(f1[i][j],f1[i-1][j-COST[i]]+VALUE[i]);
}
drp(i,count1,0)
{
rep(j,0,1000)f2[i][j]=f2[i+1][j];
drp(j,1000,COST[i])
f2[i][j]=max(f2[i][j],f2[i+1][j-COST[i]]+VALUE[i]);
}
int q;
read(q);
while(q--)
{
int c,d;
read(d);read(c);
int l=0;
while(bian[l+1]<d&&l<count1) ++l;
int r=l;
while(bian[r+1]<=d&&r<count1)++r;
int ans=-2145445;
for(int j=0;j<=c;j++)
ans=max(ans,f1[l][j]+f2[r+1][c-j]);
cout<<ans<<endl;
}
return 0;
}
后五组RE 另两组WA WHT