#include<bits/stdc++.h>
using namespace std;

int main(){


    int n, usa_point, neko_point, m; cin >> n >> usa_point >> neko_point >> m;
    map<int, pair<int, int> > usa_map;
    map<int, pair<int, int> > neko_map;
    vector<vector<bool> > usa_check(n, vector<bool> (n, false));
    vector<vector<bool> > neko_check(n, vector<bool> (n, false));    
    
    for(int i = 0; i < n; i++){
        for(int j = 0; j < n; j++){
            int input; cin >> input;
            usa_map[input] = {i, j};
        }
    }

    for(int i = 0; i < n; i++){
        for(int j = 0; j < n; j++){
            int input; cin >> input;
            neko_map[input] = {i, j};
        }
    }

    bool flag = false;

    for(int i = 0; i < m; i++){
        int num; cin >> num;

        if(flag) continue;
        //うさぎさん
        if(usa_map.find(num) != usa_map.end()){
            int usa_i = usa_map[num].first;
            int usa_j = usa_map[num].second;

            //印をつける
            usa_check[usa_i][usa_j] = true;


            //横
            bool ok = true;
            for(int j = 0; j < n; j++){
                if(!usa_check[usa_i][j]){
                    ok = false;
                    break;
                }
            }

            if(n != 1 && ok) usa_point--;
            

            //縦
            ok = true;
            for(int i = 0; i < n; i++){
                if(!usa_check[i][usa_j]){
                    ok = false;
                    break;
                }
            }

            if(n != 1 && ok) usa_point--;

            //ななめ
            if(usa_i == usa_j){
                ok = true;
                for(int k = 0; k < n; k++){
                    if(!usa_check[k][k]){
                        ok = false;
                        break;
                    }
                }
                if(n != 1 && ok) usa_point--;
            }

            //斜め
            if(usa_i + usa_j == n - 1){
                ok = true;
                for(int k = 0; k < n; k++){
                    if(!usa_check[k][n - 1 - k]){
                        ok = false;
                        break;
                    }
                }

                if(ok) usa_point--;
            }
        }


        //猫さん
        if(neko_map.find(num) != neko_map.end()){
            int neko_i = neko_map[num].first;
            int neko_j = neko_map[num].second;

            //印をつける
            neko_check[neko_i][neko_j] = true;


            //横
            bool ok = true;
            for(int j = 0; j < n; j++){
                if(!neko_check[neko_i][j]){
                    ok = false;
                    break;
                }
            }

            if(n != 1 && ok) neko_point--;
            

            //縦
            ok = true;
            for(int i = 0; i < n; i++){
                if(!neko_check[i][neko_j]){
                    ok = false;
                    break;
                }
            }

            if(n != 1 && ok) neko_point--;

            //ななめ
            if(neko_i == neko_j){
                ok = true;
                for(int k = 0; k < n; k++){
                    if(!neko_check[k][k]){
                        ok = false;
                        break;
                    }
                }
                if(n != 1 && ok) neko_point--;
            }

            //斜め
            if(neko_i + neko_j == n - 1){
                ok = true;
                for(int k = 0; k < n; k++){
                    if(!neko_check[k][n - 1 - k]){
                        ok = false;
                        break;
                    }
                }

                if(ok) neko_point--;
            }
        }

        

        //cout << neko_point << " " << usa_point << endl;
        if(neko_point <= 0 && usa_point > 0){
            cout << "NEKO" << endl;
            flag = true;
        }else if(neko_point > 0 && usa_point <= 0){
            cout << "USAGI" << endl;
            flag = true;
        }else if(neko_point <= 0 && usa_point <= 0){
            cout << "DRAW" << endl;
            flag = true;
        }
    }

    if(!flag) cout << "DRAW" << endl;

    return 0;
}


Measured memory_bytes: 21152