#include<stdio.h>
#include<list>
#include<algorithm>
class pos{
 public:
  int x;
  int y;
  pos(int hx,int hy){ x=hx; y=hy; }
};
int main(){
  using namespace std;
  int i,j,px,py,n,x,y,nx,ny;
  int dir[9][2]={{1,1},{1,0},{1,-1},{0,1},{0,0},{0,-1},{-1,1},{-1,0},{-1,-1}};
  int pdir[13][2]={{2,1},{2,0},{2,-1},
		   {-2,1},{-2,0},{-2,-1},
		   {1,2},{0,2},{-1,2},
		   {1,-2},{0,-2},{-1,-2},{0,0}};
  char futi[14][14];
  list<int> mp[10][10];
  list<pos> mlst,nxt;
  list<pos>::iterator it,se;
  //map init
  for(i=0;i<14;i++)
    for(j=0;j<14;j++) futi[i][j]=1;
  for(i=2;i<12;i++)
    for(j=2;j<12;j++) futi[i][j]=0;
  do{
    scanf("%d %d",&px,&py);
    if(!px&&!py) break;
    scanf("%d",&n);
    for(i=0,n--;i<n;i++){
      scanf("%d %d ",&x,&y);
      for(j=0;j<9;j++){
	nx=dir[j][1]+x,ny=dir[j][0]+y;
	if(!futi[ny+2][nx+2]) mp[ny][nx].push_back(i);
      }
    }
    scanf("%d %d",&x,&y);
    for(j=0;j<9;j++){
      nx=dir[j][1]+x,ny=dir[j][0]+y;
      if(!futi[ny+2][nx+2]) mp[ny][nx].push_back(i);
    }
    mlst.push_back(*(new pos(px,py)));
    for(i=0,n++;i<n;i++){
      it=mlst.begin();
      while(it!=mlst.end()){
	for(j=0;j<13;j++){
	  nx=pdir[j][0]+it->x;
	  ny=pdir[j][1]+it->y;
	  if(!futi[ny+2][nx+2]&&
	     mp[ny][nx].end()!=find(mp[ny][nx].begin(),mp[ny][nx].end(),i)){
	    se=nxt.begin();
	    while(se!=nxt.end()){
	      if(se->x==nx&&se->y==ny) break;
	      se++;
	    }
	    if(se==nxt.end()) nxt.push_back(*(new pos(nx,ny)));
	  }
	}
	it++;
      }
      if(nxt.empty()){
	printf("NA\n");
	goto NA;
      }
      mlst.clear();
      mlst.insert(mlst.end(),nxt.begin(),nxt.end());
      nxt.clear();
      printf("mlst(next:%d):",i);
      it=mlst.begin();
      while(it!=mlst.end()){
	printf("(%d %d) ",it->x,it->y);
	it++;
      }
      printf("\n");
    }
    printf("OK\n");
  NA:
    mlst.clear();
    nxt.clear();
    for(i=0;i<10;i++){
      for(j=0;j<10;j++){
	mp[i][j].clear();
      }
    }
      
  }while(1);
  return 0;
}