#include <bits/stdc++.h>
#define fst first
#define snd second
#define fore(i,a,b) for(int i=a,ThxDem=b;i<ThxDem;++i)
#define pb push_back
#define ALL(s) s.begin(),s.end()
#define FIN ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0)
#define SZ(s) int(s.size())
using namespace std;
typedef long long ll;
typedef pair<ll,ll> ii;
struct STree {
vector<ii> st; vector<int> lazy;int n;
STree(int n): st(4*n+5), lazy(4*n+5,0), n(n) {}
void push(int k, int s, int e){
if(!lazy[k])return;
if(s+1==e) st[k].fst+=lazy[k];
if(s+1<e){
lazy[2*k]+=lazy[k];
lazy[2*k+1]+=lazy[k];
}
lazy[k]=0;
}
void put(int k, int s, int e, int p, ii v){
push(k,s,e);
if(s+1==e){st[k]=v;return;}
int m=(s+e)/2;
if(p<m) put(2*k,s,m,p,v);
else put(2*k+1,m,e,p,v);
}
void upd(int k, int s, int e, int a, int b, int v){
push(k,s,e);
if(s>=b||e<=a)return;
if(s>=a&&e<=b){
lazy[k]+=v;
push(k,s,e);return;
}
int m=(s+e)/2;
upd(2*k,s,m,a,b,v);upd(2*k+1,m,e,a,b,v);
}
ii get(int k, int s, int e, int p){
push(k,s,e);
if(s+1==e) return st[k];
int m=(s+e)/2;
if(p<m) return get(2*k,s,m,p);
return get(2*k+1,m,e,p);
}
void upd(int a, int b, int v){upd(1,0,n,a,b,v);}
void put(int a, ii b){put(1,0,n,a,b);}
ii get(int a){return get(1,0,n,a);}
};
ll INF=1e18+10;
ll eval(ii a, ll x){
return x*a.fst+a.snd;
}
ll get(ii x, ii y){
if(x.fst==y.fst) return x.snd<=y.snd ? INF : -INF;
if(x.fst<y.fst) return INF;
ll a=x.fst, b=x.snd, c=y.fst, d=y.snd;
ll ans=(d-b)/(a-c)-1;
while(eval(x,ans) <= eval(y,ans)) ans++;
return ans;
}
const int MAXN=1010;
ii v[MAXN];
int ans[MAXN];
int cmp(int i, int j){
ii x=v[i], y=v[j];
return x.fst==y.fst?x.snd<y.snd:x.fst>y.fst;
}
vector<pair<ii,int>> doit(vector<pair<ii,int>> a, int n, int flag){
sort(ALL(a));
int m=SZ(a);
vector<int> id(n);
fore(i,0,n) id[i]=i;
sort(ALL(id),cmp);
STree st(n);
fore(i,0,n) st.put(i,{0,id[i]});
set<ii> s;
fore(i,0,n-1){
ll now=get(v[id[i]],v[id[i+1]]);
if(now!=INF) s.insert({now,i});
}
vector<pair<ii,int>> aa;
for(auto x:a){
while(SZ(s) && s.begin()->fst<=x.fst.fst){
int i=s.begin()->snd;
fore(it,i-1,i+2) if(it>=0&&it+1<n){
ll x=get(v[id[it]],v[id[it+1]]);
if(x!=INF) s.erase({x,it});
}
//swap i with i+1
ii v1=st.get(i), v2=st.get(i+1);
st.put(i,v2); st.put(i+1,v1);
swap(id[i],id[i+1]);
fore(it,i-1,i+2) if(it>=0&&it+1<n){
ll x=get(v[id[it]],v[id[it+1]]);
if(x!=INF) s.insert({x,it});
}
}
int stt,en;
{
int l=0,r=n-1;
while(l<=r){
int m=(l+r)/2;
if(eval(v[id[m]],x.fst.fst)<x.fst.snd) l=m+1;
else r=m-1;
}
stt=l;
}
{
int l=0,r=n-1;
while(l<=r){
int m=(l+r)/2;
if(eval(v[id[m]],x.fst.fst)<=x.snd) l=m+1;
else r=m-1;
}
en=r;
}
if(stt>en){
st.upd(0,n,1);
aa.pb(x);
}
else{
st.upd(0,stt,1);
st.upd(en+1,n,1);
}
}
fore(i,0,n){
ii now=st.get(i);
ans[now.snd]=now.fst;
}
return aa;
}
int main(){FIN;
int n; cin>>n;
fore(i,0,n) cin>>v[i].fst>>v[i].snd, v[i]={v[i].snd,-v[i].fst*v[i].snd};
int m; cin>>m;
vector<pair<ii,int>> a(m);
fore(i,0,m) cin>>a[i].fst.fst>>a[i].fst.snd>>a[i].snd;
a=doit(a,n,0);
int q; cin>>q;
fore(i,0,q) cin>>v[i].fst>>v[i].snd, v[i]={v[i].snd,-v[i].fst*v[i].snd};
doit(a,q,1);
fore(i,0,q)cout<<ans[i]<<"\n";
}