#include<iostream>

int field[102][102];//y,x
bool flag;
int sx,sy,gx,gy,col;

void erase(){
	for(int i=0; i<102; i++)
		for(int j=0; j<102; j++)
			field[i][j] = 0;
}
void DFSr(int x, int y){
	if(field[y][x] != col)
		return;
	if(x == gx && y == gy){
		flag = true;
		return;
	}
	DFSr(x+1, y);
	if(flag)
		return;
	DFSr(x, y+1);
	if(flag)
		return;
	DFSr(x, y-1);
	if(flag)
		return;
	DFSr(x-1, y);
}

void DFSl(int x, int y){
	if(field[y][x] != col)
		return;
	if(x == gx && y == gy){
		flag = true;
		return;
	}
	DFSl(x-1, y);
	if(flag)
		return;
	DFSl(x, y+1);
	if(flag)
		return;
	DFSl(x, y-1);
	if(flag)
		return;
	DFSl(x+1, y);
}

void DFS(int x, int y){
	if(sx < gy)
		DFSr(x,y);
	else
		DFSl(x,y);
}

int main(){
	int n,c,d,bx,by;
	while(true){
		flag = false;
		erase();

		std::cin >> c >> d;
		if(!c && !d)
			return 0;

		std::cin >> sx >> sy;
		std::cin >> gx >> gy;

		std::cin >> n;
		for(int i=0; i<n; i++){
			std::cin >> c >> d >> bx >> by;
			if(d==0)
				for(int h=by; h<by+2; h++)
					for(int w=bx; w<bx+4; w++)
						field[h][w] = c;
			else
				for(int h=by; h<by+4; h++)
					for(int w=bx; w<bx+2; w++)
						field[h][w] = c;
		}

		col = field[gy][gx];
		DFS(sx, sy);
		if(flag)
			std::cout << "OK\n";
		else
			std::cout << "NG\n";
	}
}