#include <bits/stdc++.h>
#define REP(i, n) for (int i = 0; i < (int)(n); i++)
using namespace std;
using P = pair<int, int>;

int main() {
  int n, u, v, m;
  cin >> n >> u >> v >> m;
  map<int, P> mpu, mpv;
  REP(i, n) REP(j, n) {
    int k;
    cin >> k;
    mpu[k] = {i, j};
  }
  REP(i, n) REP(j, n) {
    int k;
    cin >> k;
    mpv[k] = {i, j};
  }
  int ans = 0;
  vector<int> cu(2 * n + 2, 0), cv(2 * n + 2, 0);
  REP(i, m) {
    int q;
    cin >> q;
    if (n == 1) {
      if (mpu.find(q) != end(mpu)) {
        P p = mpu[q];
        cu[0]++;
      }
      if (mpv.find(q) != end(mpv)) {
        P p = mpv[q];
        cv[0]++;
      }
    } else {
      if (mpu.find(q) != end(mpu)) {
        P p = mpu[q];
        cu[p.first]++;
        cu[n + p.second]++;
        if (p.first == p.second) cu[2 * n]++;
        if (p.first == n - 1 - p.second) cu[2 * n + 1]++;
      }
      if (mpv.find(q) != end(mpv)) {
        P p = mpv[q];
        cv[p.first]++;
        cv[n + p.second]++;
        if (p.first == p.second) cv[2 * n]++;
        if (p.first == n - 1 - p.second) cv[2 * n + 1]++;
      }
    }
    int nu = 0, nv = 0;
    REP(j, 2 * n + 2) {
      if (cu[j] == n) nu++;
      if (cv[j] == n) nv++;
    }
    if (nu >= u) ans += 1;
    if (nv >= v) ans += 2;
    if (ans == 0) continue;
    if (ans == 1) {
      cout << "USAGI" << endl;
      return 0;
    }
    if (ans == 2) {
      cout << "NEKO" << endl;
      return 0;
    }
    if (ans == 3) {
      cout << "DRAW" << endl;
      return 0;
    }
  }
  cout << "DRAW" << endl;
  return 0;
}

