#include <iostream>
#include <vector>
#include <algorithm>
#include <cstdio>
#include <set>
#include <tuple>
#include <map>
#include <cmath>
#include <numeric>
#include <utility>

using namespace std;
typedef long long ll;
typedef pair<int, int> P;
typedef tuple<int, int, int> T;
typedef pair<ll, ll> Pl;
typedef tuple<ll, ll, ll> Tl;

#define REP(i,n) for(int i=0;i < n;i++)
#define EACH(it,a) for(auto it=a.begin();it!=a.end();it++)

int main() {
		int n,u,v,m;cin >> n >> u >> v >> m;
		vector<vector<int>> us(n,vector<int>(n)),ns(n,vector<int>(n));

		REP(y,n)REP(x,n) cin >> us[y][x];
		REP(y,n)REP(x,n) cin >> ns[y][x];

		map<int,pair<int,int>> umap,nmap;
		
		vector<int> ms(m);
		REP(i,m) cin >> ms[i];

		REP(y,n)REP(x,n)umap[us[y][x]]=make_pair(y,x);
		REP(y,n)REP(x,n)nmap[ns[y][x]]=make_pair(y,x);
		
		int win=0;int uc=0,nc=0;
		vector<int> utate(n),uyoko(n);int ucross1=0,ucross2=0;
		vector<int> ntate(n),nyoko(n);int ncross1=0,ncross2=0;
		

		REP(i,m){
			if(umap.count(ms[i])){
				pair<int,int> p=umap[ms[i]];
				int y=p.first,x=p.second;
				uyoko[y]++;
				if(uyoko[y]==n)uc++;

				utate[x]++;
				if(n>1 && utate[x]==n)uc++;

				if(n>1 && x+y==n-1){
					ucross1++;
					if(ucross1==n)uc++;
				}
				if(n>1 && y-x==0){
					ucross2++;
					if(ucross2==n)uc++;
				}
			}
			if(nmap.count(ms[i])){
				pair<int,int> p=nmap[ms[i]];
				int y=p.first,x=p.second;
				nyoko[y]++;
				if(nyoko[y]==n)nc++;

				ntate[x]++;
				if(n>1 && ntate[x]==n)nc++;

				if(n>1 && x+y==n-1){
					ncross1++;
					if(ncross1==n)nc++;
				}
				if(n>1 && y-x==0){
					ncross2++;
					if(ncross2==n)nc++;
				}
			}
		
			//cerr << i<<" "<<uc<<" "<<nc<<endl;
			if(uc>=u && nc<v)win=1;
			else if(uc<u && nc>=v)win=-1;
		}

		if(win==1) cout << "USAGI" << endl;
		if(win==-1) cout << "NEKO" << endl;
		if(win==0) cout << "DRAW" << endl;
}