#include<iostream>
#include<string>
#include<string.h>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<stdlib.h>
#include<queue>
#include<map>
#include<vector>
#include<list>
#include<stack>
#include<functional>

using namespace std;

#define all(c) (c).begin(), (c).end()
#define rep(i,n) for(int i=0;i<n;i++)

typedef unsigned long long ull; typedef long long ll;

const int INF=100000000; int dx[4]={1,0,-1,0}; int dy[4]={0,1,0-1};

typedef pair<int ,int > P;

char maze[105][105];

int sx,sy; int gx,gy; int w,h;

char sc; //スタート地点のカラー

//stdin //stdout

void dfs(int x,int y) { maze[x][y]='9';

for(int i=0;i<4;i++) { int nx=x+dx[i]; int ny=y+dy[i];

if(0<=nx && nx<=w && 0<=ny && ny<=h &&maze[nx][ny]==sc) { dfs(nx,ny); }

} return ; }

void solve() {

rep(i,101) rep(j,101) maze[i][j]='0';

int n; char c; int d; int x,y;

cin>>sy>>sx; cin>>gy>>gx;

cin>>n;

rep(i,n) { cin>>c>>d>>y>>x;

if(d==1) { rep(i,4) { rep(j,2) { maze[x+i][y+j]=c;

} } } else if (d==0) { rep(i,2) { rep(j,4) { maze[x+i][y+j]=c;

} } }

} //6 6 //1 1 //3 6 //2 //1 0 1 1 //1 1 3 3 // rep(i,w+1) // { // rep(j,h+1) // { // cout<<maze[i][j]; //// } // cout<<endl; // } //// cout<<maze[gx][gy]<<endl;

if(maze[sx][sy]=='0') { cout<<"NG"<<endl; return; } else { sc=maze[sx][sy]; dfs(sx,sy); }

//rep(i,w+1) //{ // rep(j,h+1) // { // cout<<maze[i][j];

// } // cout<<endl; //}

if(maze[gx][gy]=='9') { cout<<"OK"<<endl; return; } else { cout<<"NG"<<endl; return; }

}

int main() {

while(cin>>w>>h) { if(w==0 && h==0) { return 0; } else { solve(); } }

return 0; }