#include <stdio.h>
#include <algorithm>
#include <vector>
#define PB push_back
#define NMAX 550
using namespace std;
vector < int > A[NMAX], B[NMAX];
vector < int > AA[NMAX], BB[NMAX];
int i, j, N, T, U, W, K1, K2, OK, OK1, OK2;
void citeste(vector < int > V[], int X, int &K)
{
int i, elem = 0, cnt = 0;
K = 1;
for (i = 1; i <= N * X; i++)
{
scanf("%d", &elem);
if (cnt == N) { sort(V[K].begin(), V[K].end()); ++K; cnt = 0; }
V[K].PB(elem), cnt++;
}
sort(V[K].begin(), V[K].end());
sort(V + 1, V + K + 1);
}
void afiseaza(vector <int> V[], int L)
{
int i, j, sz;
for (i = 1; i <= L; i++)
{
sz = V[i].size();
for (j = 0; j < sz; j++) printf("%d ", V[i][j]);
printf("\n");
}
printf("\n");
}
int compara(vector < int > A, vector < int > B)
{
int i, sz;
sz = A.size();
for (i = 0; i < sz; i++)
{
if (A[i] > B[i]) return 1;
if (A[i] < B[i]) return 2;
}
return 0;
}
void reseteaza(vector < int > V1[], vector < int > V2[], int X1, int X2)
{
int i;
for (i = 0; i <= X1; i++) V1[i].clear();
for (i = 0; i <= X2; i++) V2[i].clear();
}
void elim(vector < int > VV[], vector < int > V[], int X, int &K)
{
int i, j, sz;
sz = V[1].size();
K = 1;
for (i = 0; i < sz; i++) VV[K].PB(V[1][i]);
for (i = 2; i <= X; i++)
{
if (compara(VV[K], V[i]) != 0)
{
K++;
sz = V[i].size();
for (j = 0; j < sz; j++) VV[K].PB(V[i][j]);
}
}
}
int main()
{
freopen("amlei.in", "r", stdin);
freopen("amlei.out", "w", stdout);
//scanf("%d", &W);
while (scanf("%d %d %d", &N, &T, &U)>1)
{
citeste(A, T, K1);
citeste(B, U, K2);
elim(AA, A, T, K1);
elim(BB, B, U, K2);
//printf("\nTestul %d\n", W+1);
//afiseaza(A, T);
//afiseaza(AA, K1);
//afiseaza(B, U);
//afiseaza(BB, K2);
if (K1 != K2) { printf("NU\n"); continue; }
OK = 1;
for (i = 1; i <= K1; i++)
if ( compara(AA[i], BB[i]) != 0 ) { OK = 0; break; }
if (OK) printf("DA\n");
else printf("NU\n");
reseteaza(A, B, T, U);
reseteaza(AA, BB, K1, K2);
}
return 0;
}