#include <stdio.h>
#include <queue>
#include <iostream>

#define MAX 110

int map[MAX][MAX];

void makemap(int c, int d, int x, int y);

int bfs(int xs,int ys,int xg,int yg);

int main()
{
	int w,h,xs,ys,xg,yg,n,c,d,x,y;
	while(1)
	{
	scanf("%d%d",&w,&h);
	if(w==0 && h==0)
		return 0;
	scanf("%d%d",&xs,&ys);
	scanf("%d%d",&xg,&yg);
	scanf("%d",&n);

	for(int i=0;i<MAX;i++)
		for(int j=0;j<MAX;j++)
			map[i][j]=0;

	for(int i=0;i<n;i++)
	{
		scanf("%d%d%d%d",&c,&d,&x,&y);
		makemap(c,d,x,y);
	}

	if(bfs(xs+1,ys+1,xg+1,yg+1)==0)
		printf("OK\n");
	else
		printf("NG\n");
	}
	return 0;
}

void makemap(int c, int d, int x, int y)
{
	if(d==0)
		for(int i=x+1;i<x+5;i++)
			for(int j=y+1;j<y+3;j++)
				map[i][j]=c;
	else
		for(int i=x+1;i<x+3;i++)
			for(int j=y+1;j<y+5;j++)
				map[i][j]=c;
}

int bfs(int xs,int ys,int xg,int yg)
{
	int startcolor=map[xs][ys];
	int nowx=xs,nowy=ys;
	using namespace std;
	queue<int> x;
	queue<int> y;
	while(1)
	{
		if(nowx==xg && nowy == yg && map[nowx][nowy]==startcolor )
			return 0;
		map[nowx][nowy]=0;
		if(map[nowx-1][nowy]==startcolor)
		{
			x.push(nowx-1);
			y.push(nowy);
		}
		if(map[nowx][nowy-1]==startcolor)
		{
			x.push(nowx);
			y.push(nowy-1);
		}
		if(map[nowx][nowy+1]==startcolor)
		{
			x.push(nowx);
			y.push(nowy+1);
		}
		if(map[nowx+1][nowy]==startcolor)
		{
			x.push(nowx+1);
			y.push(nowy);
		}
		if(x.empty()==1 && y.empty()==1)
			return 1;
		nowx=x.front();
		nowy=y.front();
		x.pop();
		y.pop();
	}
}