#include <iostream>
struct point{
	int x;
	int y;
};
int m[101][101];
int w,h,r;
point gp;
void dfs(int x,int y,int c){
	if(!(x-gp.x)&&!(y-gp.y))r=1;
	if(x>0&&m[x-1][y]==c)m[x-1][y]=0,dfs(x-1,y,c);
	if(x<w&&m[x+1][y]==c)m[x+1][y]=0,dfs(x+1,y,c);
	if(y>0&&m[x][y-1]==c)m[x][y-1]=0,dfs(x,y-1,c);
	if(y<h&&m[x][y+1]==c)m[x][y+1]=0,dfs(x,y+1,c);
	return ;
}

int main(){
	//whÍ{[hÌå«³AnÍubNÌÂ
	int n,c,d;
	//spÍX^[gn_ÌÀWAgpÍS[n_ÌÀW
	point sp,bp;
	
	while(1){
		for(int y=0;y<101;y++){
			for(int x=0;x<101;x++){
				m[x][y] = 0;
			}
		}
		r=0;
		std::cin>>w>>h;
		if(!w&&!h)return 0;
		std::cin>>sp.x>>sp.y;
		std::cin>>gp.x>>gp.y;
		std::cin>>n;
		for(int i=0;i<n;i++){
			std::cin>>c>>d>>bp.x>>bp.y;
			int bw,bh;
			d?bw=2,bh=4:bh=2,bw=4;
			for(int y=bp.y;y<=bp.y+bh;y++){
				for(int x=bp.x;x<=bp.x+bw;x++){
					m[x][y] = c;
				}
			}
		}
		if(m[sp.x][sp.y])dfs(sp.x,sp.y,m[sp.x][sp.y]),m[sp.x][sp.y] = 0;
		if(r)std::cout<<"OK"<<std::endl;
		else{std::cout<<"NG"<<std::endl;}
	}
}