#include <stdio.h>
#include <string.h>
#define MAXN 512
#define MOD 666013
int N, M, P, S1[MAXN], S2[MAXN], S3[MAXN];
int A[2][MAXN][MAXN], aib[2][MAXN];
void update(int ind, int x, int val)
{
for(; x < MAXN; x += (x&(x-1))^x)
{
aib[ind][x] += val;
if(aib[ind][x] >= MOD)
aib[ind][x] -= MOD;
}
}
int query(int ind, int x)
{
int val = 0;
for(; x > 0; x -= (x&(x-1))^x)
{
val += aib[ind][x];
if(val >= MOD)
val -= MOD;
}
return val;
}
int baga(void)
{
int u = 0, v = 1, i, j, k, j1, k1, r;
for(j = 1; j <= N; j++, memset(aib[u], 0, sizeof(aib[u])))
for(k = 1; k <= M; k++)
{
A[u][j][k] = A[u][j-1][k];
if(S1[j] == S2[k])
{
A[u][j][k] += query(u, S2[k]);
if(A[u][j][k] >= MOD)
A[u][j][k] -= MOD;
A[u][j][k] += 1;
if(A[u][j][k] >= MOD)
A[u][j][k] -= MOD;
}
update(u, S2[k], A[u][j-1][k]);
}
for(i = 1; i <= P; i++)
{
memset(A[v], 0, sizeof(A[v]));
memset(aib[u], 0, sizeof(aib[u]));
memset(aib[v], 0, sizeof(aib[v]));
for(j = 1; j <= N; j++, memset(aib[u], 0, sizeof(aib[u])),
memset(aib[v], 0, sizeof(aib[v])) )
for(k = 1; k <= M; k++)
{
A[v][j][k] = A[v][j-1][k];
if(S1[j] == S2[k])
{
if(S1[j] == S3[i])
{
if(i == 1)
{
A[v][j][k] += 1;
if(A[v][j][k] >= MOD)
A[v][j][k] -= MOD;
}
A[v][j][k] += query(u, S1[j]);
if(A[v][j][k] >= MOD)
A[v][j][k] -= MOD;
}
else
{
A[v][j][k] += query(v, S1[j]);
if(A[v][j][k] >= MOD)
A[v][j][k] -= MOD;
}
}
if(A[u][j-1][k])
update(u, S2[k], A[u][j-1][k]);
if(A[v][j-1][k])
update(v, S2[k], A[v][j-1][k]);
}
u ^= 1, v ^= 1;
}
for(r = 0, i = 1; i <= M; i++)
r += A[u][N][i], r %= MOD;
return r;
}
int main(void)
{
freopen("pedefe.in", "rt", stdin);
freopen("pedefe.out", "wt", stdout);
int i;
scanf("%d %d %d\n", &N, &M, &P);
for(i = 1; i <= N; i++)
scanf("%d ", &S1[i]);
for(i = 1; i <= M; i++)
scanf("%d ", &S2[i]);
for(i = 1; i <= P; i++)
scanf("%d ", &S3[i]);
printf("%d\n", baga());
return 0;
}