#include<iostream>
#include<queue>

using namespace std ;

int map[ 100 ][ 100 ] ;
int w ,h ;
int gx ,gy ;
int way ;

struct ST
{
	int x ;
	int y ;
} ;

ST s ;

void ans()
{
	queue< ST > que ;
	int mx[ 4 ] = { 1 ,0 ,0 ,-1 } ;
	int my[ 4 ] = { 0 ,1 ,-1 ,0 } ;
	bool came[ 100 ][ 100 ] = { false } ;
	que.push( s ) ;
	came[ s.y ][ s.x ] = true ;
	while( ! que.empty() )
	{
		s = que.front() ;
		if( s.x == gx && s.y == gy )
		{
			cout << "OK" << endl ;
			return ;
		}
		que.pop() ;
		for( int i = 0 ; i < 4 ; i++ )
		{
			s.x += mx[ i ] ;
			s.y += my[ i ] ;
			if( came[ s.y ][ s.x ] == false && map[ s.y ][ s.x ] == way )
			{
				came[ s.y ][ s.x ] = true ;
				que.push( s ) ;
				s.x -= mx[ i ] ;
				s.y -= my[ i ] ;
			}
		}
	}
	cout << "NG" << endl ;
	return ;
}


int main()
{
	while( cin >> w >> h ,h )
	{
		int n ;
		int color ,muki ,x ,y ;
		cin >> s.x >> s.y ;
		cin >> gx >> gy ;
		cin >> n ;
		while( n )
		{
			n-- ;
			cin >> color >> muki >> x >> y ;
			x-- ;
			y-- ;
			if( muki )
			{
				for( int i = 0 ; i < 4 ; i++ )
				{
					for( int j = 0 ; j < 2 ; j++ )
					{
						map[ y + i ][ x + j ] = color ;
					}
				}
			}
			else
			{
				for( int i = 0 ; i < 2 ; i++ )
				{
					for( int j = 0 ; j < 4 ; j++ )
					{
						map[ y + i ][ x + j ] = color ;
					}
				}
			}
		}
		gx-- ;
		s.x-- ;
		gy-- ;
		s.y-- ;
		way = map[ s.y ][ s.x ] ;
		if( map[ gy ][ gx ] == way )
		{
			ans() ;
		}
		else
		{
			cout << "NA" << endl ;
		}
	}
	return 0 ;
}