#include <iostream>
#include <vector>
#include <map>
#include <queue>
#include <algorithm>
using namespace std;

typedef pair<int,int> P;
typedef pair<P,int> State;

// s[y][x] := (x,y) にあるスプリンクラーの番号. (何もないときは 0 )
int s[10][10];
// memo[x][y][cnt] := (x,y) に cnt 回目のジャンプが探索済みかどうか
bool memo[10][10][12];

int dx[16] = {-2,-1, 0,+1,+2,-2,+2,-2,+2,-2,+2,-2,-1, 0,+1,+2};
int dy[16] = {-2,-2,-2,-2,-2,-1,-1, 0, 0,+1,+1,+2,+2,+2,+2,+2};

// 初期化
void init(){
	for(int y=0 ; y < 10 ; y++ ){
		for(int x=0 ; x < 10 ; x++ ){
			s[y][x] = 0;
			for(int i=0 ; i < 12 ; i++ ){
				memo[x][y][i] = false;
			}
		}
	}
}

// cnt 番目のスプリンクラーの水が (x,y) にかかるかどうか
bool is_fountain(int px, int py, int cnt){
	for(int y = -1 ; y <= 1 ; y++ ){
		for(int x = -1 ; x <= 1 ; x++ ){
			int mx = px + x;
			int my = py + y;
			if( mx < 0 || my < 0 || mx >= 10 || my >= 10 ) continue;
			
			if( s[my][mx] == cnt ){
				return true;
			}
		}
	}
	return false;
}

// 幅優先探索
bool bfs(int sx, int sy, int n){
	State start( P(sx,sy) , 1 );
	queue<State> q;
	q.push( start );
	
	while( !q.empty() ){
		int x = q.front().first.first;
		int y = q.front().first.second;
		int cnt = q.front().second;
		q.pop();
		
		memo[x][y][cnt] = true;
		for(int i=0 ; i < 16 ; i++ ){
			int mx = x + dx[i];
			int my = y + dy[i];
			if( mx < 0 || my < 0 || mx >= 10 || my >= 10 ) continue;
			if( memo[mx][my][cnt] ) continue;
			
			// ゴール(n番目のスプリンクラーの水)に到達したとき.
			if( cnt == n && is_fountain(mx,my,cnt) ){
				return true;
			}
			// ジャンプした先が cnt 番目のスプリンクラーの水だったとき.
			if( is_fountain(mx,my,cnt) ){
				State next( P(mx,my) , cnt+1 );
				q.push( next );
			}
		}
	}
	return false;
}

int main(){
	int n, sx, sy;
	while( cin >> sx >> sy, sx || sy ){
		// 初期化
		init();
		
		cin >> n;
		for(int i=1 ; i <= n ; i++ ){
			int x, y;
			cin >> x >> y;
			s[y][x] = i;
		}
		bool ans = bfs(sx,sy,n);
		cout << (ans? "OK" : "NA") << endl;
	}
}