RT
#include<bits/stdc++.h>
using namespace std;
namespace estidi{
long long pw2(long long x){
return x*x;
}
long long dis(long long fx,long long fy,long long sx,long long sy){
return pw2(fx-sx)+pw2(fy-sy);
}
long long maxdis(long long fx,long long fy,long long sx,long long sy,long long px,long long py){
return pw2(max(abs(py-fy),abs(py-sy)))+pw2(max(abs(px-fx),abs(px-sx)));
}
struct node{
int x,y,ls,rs,minx,maxx,miny,maxy;
}a[100003];
int b[100003],px,py,k;
struct num{
int id;
long long v;
};
bool operator < (num a,num b){
if(a.v==b.v)
return a.id<b.id;
return a.v>b.v;
}
priority_queue<num>pq;
bool cmpx(int x,int y){
if(a[x].x==a[y].x)
return a[x].y>a[y].y;
return a[x].x<a[y].x;
}
bool cmpy(int x,int y){
if(a[x].y==a[y].y)
return a[x].x<a[y].x;
return a[x].y<a[y].y;
}
void pushup(int x){
a[x].maxx=a[x].x;
a[x].minx=a[x].x;
a[x].maxy=a[x].y;
a[x].miny=a[x].y;
if(a[x].ls){
a[x].maxx=max(a[x].maxx,a[a[x].ls].maxx);
a[x].minx=min(a[x].minx,a[a[x].ls].minx);
a[x].maxy=max(a[x].maxy,a[a[x].ls].maxy);
a[x].miny=min(a[x].miny,a[a[x].ls].miny);
}
if(a[x].rs){
a[x].maxx=max(a[x].maxx,a[a[x].rs].maxx);
a[x].minx=min(a[x].minx,a[a[x].rs].minx);
a[x].maxy=max(a[x].maxy,a[a[x].rs].maxy);
a[x].miny=min(a[x].miny,a[a[x].rs].miny);
}
}
int build(int l,int r,int k){
if(l>r)
return 0;
int mid=(l+r)>>1;
if(k)
nth_element(b+l,b+mid,b+1+r,cmpx);
else
nth_element(b+l,b+mid,b+1+r,cmpy);
a[b[mid]].ls=build(l,mid-1,k^1);
a[b[mid]].rs=build(mid+1,r,k^1);
pushup(b[mid]);
return b[mid];
}
void ask(int x){
if(!x)
return;
if((int)pq.size()==k&&maxdis(a[x].minx,a[x].miny,a[x].maxx,a[x].maxy,px,py)<pq.top().v)
return;
if((int)pq.size()==k){
int d=dis(px,py,a[x].x,a[x].y);
if(d>pq.top().v||(d==pq.top().v&&x<pq.top().id))
pq.push({x,d});
}
else
pq.push({x,dis(px,py,a[x].x,a[x].y)});
if((int)pq.size()>k)
pq.pop();
if(maxdis(a[a[x].ls].minx,a[a[x].ls].miny,a[a[x].ls].maxx,a[a[x].ls].maxy,px,py)>=maxdis(a[a[x].rs].minx,a[a[x].rs].miny,a[a[x].rs].maxx,a[a[x].rs].maxy,px,py)){
ask(a[x].ls);
ask(a[x].rs);
}
else{
ask(a[x].rs);
ask(a[x].ls);
}
}
int main(){
int n,q,root;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d%d",&a[i].x,&a[i].y);
b[i]=i;
}
root=build(1,n,0);
scanf("%d",&q);
while(q--){
scanf("%d%d%d",&px,&py,&k);
ask(root);
printf("%d\n",pq.top().id);
while(pq.size()){
// printf("%d:%d\n",pq.top().id,pq.top().v);
pq.pop();
}
}
return 0;
}
}
int main(){
estidi::main();
return 0;
}