#include <stdio.h>
int lovitn,hmax,x,y,h,w,k=1,wall[100000][3],lovit[100000][3],i1,i2,i3,n,M;
bool binlovit;
int main()
{
FILE *in,*out;
in=fopen("walls.in","rt");
out=fopen("walls.out","wt");
fscanf(in,"%d",&n); //citim nr ziduri
for(i1=0;i1<n;i1++) //citire
{
fscanf(in,"%d%d",&w,&wall[i1][2]); //zid-width,inaltime-zid
if(wall[i1][2]>hmax)
hmax=wall[i1][2]; //gasim h max
wall[i1][0]=k;
wall[i1][1]=k+w-1;
k+=3;
//printf("%d %d %d\n",wall[i1][0],wall[i1][1],wall[i1][2]); //x1,x2,h
}
fscanf(in,"%d",&M); //numarul de trageri
for(i1=0;i1<M;i1++)
{
fscanf(in,"%d%d",&x,&y);
if(y<=hmax)
{
//printf("%d %d ",x,y);
//cautam de unde incep zidurile mai in stanga decat tunul; x2
i2=n-1;
while(wall[i2][1]>x)
i2--;
//incepand de la zidul gasit pe i2, cautam pe cele cu h mai mare sau egal decat y turn
while(wall[i2][2]<y)
i2--;
//gasit - turnul nimerit - i2;
//printf("%d\n",i2);
//nivelul la care a fost lovit zidul este y, verificam daca a mai fost lovit nivelul respectiv
//din turnul respectiv
binlovit=false;
for(i3=0;i3<lovitn;i3++)
{
if(lovit[i3][0]==i2&&lovit[i3][1]==y) //lovit la acelasi zid + acelasi nivel
{
binlovit=true;
lovit[i3][3]++;
//daca a fost lovit nivelul respectiv verificam daca ajunge sa-l doboare
if(lovit[i3][3]==wall[i2][1]-wall[i2][0])
{
fprintf(out,"HIT %d %d YES\n",wall[i2][1]-lovit[i3][3],i2+1);
wall[i2][2]=y-1;
}
else
fprintf(out,"HIT %d %d NO\n",wall[i2][1]-lovit[i3][3],i2+1); //daca nu l-a doborat
}
}
if(!binlovit) // daca n-a mai fost lovit pana acum {zid,nivel}
{
lovit[lovitn][0]=i2;
lovit[lovitn][1]=y;
lovit[lovitn][2]=1;
lovitn++;
fprintf(out,"HIT %d %d NO\n",wall[i2][1]-lovit[i3][3],i2+1);
}
}
else
fprintf(out,"MISS\n");
}
fclose(in);
fclose(out);
return 0;
}