#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10,W=3e5+10;
int n,q,rt[W];vector<int>g[W];
struct SGT{
int cnt;
struct Tree{int ls,rs,cnt;}tr[W<<5];
void update(int l,int r,int k,int lst,int&p){
p=++cnt,tr[p].ls=tr[lst].ls,tr[p].rs=tr[lst].rs;
if(l==r)return tr[p].cnt=tr[lst].cnt+1,void();
int mid=l+r>>1;
if(k<=mid)update(l,mid,k,tr[lst].ls,tr[p].ls);
else update(mid+1,r,k,tr[lst].rs,tr[p].rs);
tr[p].cnt=tr[tr[p].ls].cnt+tr[tr[p].rs].cnt;
}int query(int l,int r,int le,int ri,int rt1,int rt2){
if(l>=le&&r<=ri)return tr[rt1].cnt-tr[rt2].cnt;
int mid=l+r>>1,ret=0;
if(le<=mid)ret+=query(l,mid,le,ri,tr[rt1].ls,tr[rt2].ls);
if(ri>mid)ret+=query(mid+1,r,le,ri,tr[rt1].rs,tr[rt2].rs);
return ret;
}
}t;
int main(){
cin>>n;
for(int i=1,x,y;i<=n;i++)cin>>x>>y,g[x+y+1].push_back(x-y+100001);
for(int i=1;i<=W-10;i++){
rt[i]=rt[i-1];
for(int j:g[i])t.update(1,W-9,j,rt[i-1],rt[i]);
}cin>>q;
for(int a,b,k;q--;){
cin>>a>>b>>k;int l=0,r=W-9,aa=a+b+1,bb=a-b+100001;
for(int mid;l<r;mid=l+r>>1,cerr<<max(bb-mid,1)<<' '<<min(bb+mid,W-9)<<'\n',t.query(1,W-9,max(bb-mid,1),min(bb+mid,W-9),rt[min(aa+mid,W-9)],rt[max(aa-mid,1)-1])>=k?r=mid:l=mid+1);
cout<<l<<'\n';
}return 0;
}