#include <cstdio>
#include <algorithm>
using namespace std;
#define Nmax 510
#define MOD 666013
int n, m, p, Vmax;
int A[Nmax][Nmax], B[Nmax][Nmax], Sa[Nmax], Sb[Nmax], SA[Nmax], SB[Nmax];
int S1[Nmax], S2[Nmax], S3[Nmax];
void citire () {
int i;
scanf ("%d %d %d", &n, &m, &p);
for (i = 1; i <= n; i++) {
scanf ("%d", &S1[i]);
if (S1[i] > Vmax) Vmax = S1[i];
}
for (i = 1; i <= m; i++) {
scanf ("%d", &S2[i]);
if (S2[i] > Vmax) Vmax = S2[i];
}
for (i = 1; i <= p; i++)
scanf ("%d", &S3[i]);
}
void dinamica () {
int i, j, k, jj;
A[0][0] = 1;
Sa[0] = 1;
for (i = 1; i <= n; i++) {
memset (SA, 0, sizeof (SA));
for (jj = 0; jj <= Vmax; jj++)
SA[jj] = 1;
for (j = 1; j <= m; j++) {
if (S1[i] == S2[j]) {
A[i][j]+= SA[S2[j]];
if (A[i][j] >= MOD) A[i][j]-= MOD;
}
if (Sa[j]) {
for (jj = S2[j]; jj <= Vmax; jj++)
SA[jj]+= Sa[j];
}
}
for (j = 1; j <= m; j++)
Sa[j] = Sa[j] + A[i][j];
}
memset (Sa, 0, sizeof (Sa));
memset (SA, 0, sizeof (SA));
Sa[0] = 1;
for (k = 1; k <= p; k++) {
for (i = 1; i <= n; i++) {
memset (SA, 0, sizeof (SA));
memset (SB, 0, sizeof (SB));
if (Sa[0]) {
for (jj = 0; jj <= Vmax; jj++)
SA[jj] = Sa[0];
}
for (j = 1; j <= m; j++) {
if (S1[i] == S2[j]) {
if (S1[i] == S3[k]) {
B[i][j]+= SA[S2[j]];
if (B[i][j] >= MOD) B[i][j]-= MOD;
}
else {
B[i][j]+= SB[S2[j]];
if (B[i][j] >= MOD) B[i][j]-= MOD;
}
}
if (Sa[j] || Sb[j]) {
for (jj = S2[j]; jj <= Vmax; jj++)
SA[jj]+= Sa[j], SB[jj]+= Sb[j];
}
}
for (j = 1; j <= m; j++) {
Sb[j] = Sb[j] + B[i][j];
Sa[j] = Sa[j] + A[i][j];
}
}
memcpy (Sa, Sb, sizeof (Sa));
memset (Sb, 0, sizeof (Sb));
memset (Sa, 0, sizeof (Sa));
for (i = 0; i <= n; i++) {
memcpy (A[i], B[i], sizeof (A[i]));
memset (B[i], 0, sizeof (B[i]));
}
}
int sol = 0;
for (i = 1; i <= n; i++)
for (j = 1; j <= m; j++) {
sol+= A[i][j];
if (sol >= MOD) sol-= MOD;
}
printf ("%d", sol);
}
int main () {
freopen ("pedefe.in", "r", stdin);
freopen ("pedefe.out", "w", stdout);
citire ();
dinamica ();
return 0;
}