//Ilie Dumitru
#include<cstdio>
#include<algorithm>
const int NMAX=10005;
int N, M;
int X[NMAX], A[NMAX], B[NMAX];
int ans;
int fastExp(int a, int b)
{
if(b==0)
return 1;
if(b==1)
return a;
int x=fastExp(a, b>>1);
x*=x;
if(b&1)
x*=a;
return x;
}
void back(int k, bool under, bool over)
{
if(under && over)
ans+=fastExp(N, M-k);
else if(k<M)
{
int i;
if(over)
{
for(i=0;i<B[k];++i)
back(k+1, 1, 1);
back(k+1, 0, 1);
}
else if(under)
{
back(k+1, 1, 0);
for(i=A[k]+1;i<N;++i)
back(k+1, 1, 1);
}
else
{
if(A[k]<B[k])
{
back(k+1, 1, 0);
for(i=A[k]+1;i<B[k];++i)
back(k+1, 1, 1);
back(k+1, 0, 1);
}
else
back(k+1, 0, 0);
}
}
}
int main()
{
FILE* f=fopen("nextseq.in", "r"), *g=fopen("nextseq.out", "w");
int i, a, l, r, mid;
fscanf(f, "%d%d%d", &N, &a, &M);
for(i=0;i<N;++i)
fscanf(f, "%d", X+i);
std::sort(X, X+N);
for(i=0;i<M-a;++i)
A[i]=-1;
for(;i<M;++i)
{
fscanf(f, "%d", &a);
l=0;
r=N-1;
while(l<=r)
{
mid=l+((r-l)>>1);
if(a==X[mid])
a=mid, l=r+1;
else if(a>X[mid])
l=mid+1;
else
r=mid-1;
}
A[i]=a;
}
for(i=0;i<M;++i)
{
fscanf(f, "%d", &a);
l=0;
r=N-1;
while(l<=r)
{
mid=l+((r-l)>>1);
if(a==X[mid])
a=mid, l=r+1;
else if(a>X[mid])
l=mid+1;
else
r=mid-1;
}
B[i]=a;
}
back(0, 0, 0);
fprintf(g, "%d\n", ans);
fclose(f);
fclose(g);
return 0;
}