#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <climits>
#include <vector>
#include <map>
#include <set>
#include <list>
#include <stack>
#include <queue>
#include <algorithm>
#include <iostream>
#include <string>

#define REP(i,n) for(int i=0;i<n;++i)
#define REPR(i,n) for(int i=n;i>=0;--i)
#define REPI(itr,v) for(auto itr=v.begin();itr!=v.end();++itr)
#define REPIR(itr,v) for(auto itr=v.rbegin();itr!=v.rend();++itr)
#define FOR(i,a,b) for(int i=a;i<b;++i)
#define SORT(v,n) sort(v, v+n)
#define SORTV(v) sort(v.begin(), v.end())
#define ALL(v) v.begin(),v.end()
#define llong long long
#define INF 999999999
#define SUR 1000000007
#define pb push_back
#define pf push_front
#define MP make_pair

int dx[] = {0, 0, -1, 1};
int dy[] = {1, -1, 0, 0};

using namespace std;

typedef pair<int,int> pii;

int a[500][500], b[500][500];

struct data{
  //bool line_x[500] = {}, line_y[500] = {};
  bool used[500][500] = {};
  bool naname[2] = {};
};

int main(){

  int n, u, v, m;
  scanf("%d %d %d %d", &n, &u, &v, &m);

  map<int, pii> mp1, mp2;
  REP(i,n){
    REP(j,n){
      scanf("%d", &a[i][j]);
      mp1[a[i][j]] = MP(i, j); 
    }
  }
  REP(i,n){
    REP(j,n){
      scanf("%d", &b[i][j]);
      mp2[b[i][j]] = MP(i, j);
    }
  }
  data usa, neko;
  vector<int> card_v(m);
  REP(i,m){
    scanf("%d", &card_v[i]);
  }

  if(n == 1){
    REP(i,m){
      int card = card_v[i];
      if(a[0][0] == card){
        u--;
      }
      if(b[0][0] == card){
        v--;
      }
      if(u <= 0 && v <= 0){
        printf("DRAW\n");
        return 0;
      }else if(u <= 0){
        printf("USAGI\n");
        return 0;
      }else if(v <= 0){
        printf("NEKO\n");
        return 0;
      }

    }
    printf("DRAW\n");
    return 0;
  }


  REP(i,m){
    int card = card_v[i];
    //USAGI
    if(mp1.find(card) != mp1.end()){
      int y = mp1[card].first, x = mp1[card].second;
      usa.used[y][x] = true;

      bool isLine = true;
      REP(j,n){
        if(!usa.used[y][j]){
          isLine = false;
          break;
        }
      }
      if(isLine){
        u--;
      }

      isLine = true;
      REP(j,n){
        if(!usa.used[j][x]){
          isLine = false;
          break;
        }
      }
      if(isLine){
        u--;
      }

      //naname
      if(x == y){
        isLine = true;
        REP(j,n){
          if(!usa.used[j][j]){
            isLine =false;
            break;
          }
        }
        if(isLine){
          u--;
        }
      }

      if((x + y) == n - 1){
        isLine = true;
        REP(j,n){
          if(!usa.used[j][n-j-1]){
            isLine = false;
            break;
          }
        }
        if(isLine){
          u--;
        }
      }
    }
    //NEKO

    if(mp2.find(card) != mp2.end()){
      int y = mp2[card].first, x = mp2[card].second;
      neko.used[y][x] = true;

      bool isLine = true;
      REP(j,n){
        if(!neko.used[y][j]){
          isLine = false;
          break;
        }
      }
      if(isLine){
        v--;
      }

      isLine = true;
      REP(j,n){
        if(!neko.used[j][x]){
          isLine = false;
          break;
        }
      }
      if(isLine){
        v--;
      }

      //naname
      if(x == y){
        isLine = true;
        REP(j,n){
          if(!neko.used[j][j]){
            isLine =false;
            break;
          }
        }
        if(isLine){
          v--;
        }
      }

      if((x + y) == n - 1){
        isLine = true;
        REP(j,n){
          if(!neko.used[j][n-j-1]){
            isLine = false;
            break;
          }
        }
        if(isLine){
          v--;
        }
      }
    }
/*
    REP(i,n){
      REP(j,n){
        cout << usa.used[i][j] << " ";
      }
      cout << endl;
    }


    REP(i,n){
      REP(j,n){
        cout << neko.used[i][j] << " ";
      }
      cout << endl;
    }
*/
     if(u <= 0 && v <= 0){
        printf("DRAW\n");
        return 0;
      }else if(u <= 0){
        printf("USAGI\n");
        return 0;
      }else if(v <= 0){
        printf("NEKO\n");
        return 0;
      }

    //cout << u << " " << v << endl;

  }
  printf("DRAW\n");
  return 0;
}




Measured memory_bytes: 22964