program b;
const 
 MaxN=10000;
 MaxM=MaxN*MaxN;


 
var
 MxLen:array[0..MaxN-1,0..MaxN-1] of Integer;
 I,J,K,N,Kam,Cena,A,B:Integer;
{ Ceny:array[0..MaxN*MaxN-1]of Integer;}
 
procedure vypis;
begin
{  for I:=0 to N-1 do
  begin
   for J:=0 to N-1 do
    Write(MxLen[I,J]:3,'  ');
   WriteLn;
 end;
 WriteLn;}
end; 
 
 
begin
 while True do
 begin
  ReadLn(N);
  if N=0 then Break;
  for I:=0 to N-1 do
   for J:=0 to N-1 do
   if I=J then MxLen[I,J]:=0
   else MxLen[I,J]:=-1;
  
  for I:=0 to N-1 do
  begin
   while not EoLn do
   begin
    Read(Kam);
    if Kam=0 then Break;
    Read(Cena);
    MxLen[I,Kam]:=Cena;
    MxLen[Kam,I]:=Cena;
   end;
   ReadLn;
  end;
  
  Vypis;
  
  for K:=0 to N-1 do
  begin
   for I:=0 to N-1 do
    for J:=0 to N-1 do
     if ((MxLen[I,K]<>-1) and (MxLen[K,J]<>-1)) 
      and ((MxLen[I,J]=-1) or (MxLen[I,J]>MxLen[I,K]+MxLen[K,J])) then
     begin
      MxLen[I,J]:=MxLen[I,K]+MxLen[K,J];
     end;
     Vypis;
{   WriteLn;}
  end;    

  while True do
  begin
    ReadLn(A);
    if A=0 then Break;
    B:=0;
    for I:=0 to N-1 do
     for J:=0 to N-1 do
     if MxLen[I,J]=A then begin B:=1; break; end;
   
    if B=0 then WriteLn('NAY')
    else WriteLN('AYE');
  end; 

 end; 
end.