#include <stdio.h>
#include <string.h>
#define fin "nextseq.in"
#define fout "nextseq.out"
#define NMAX 10001
int S[NMAX],A[NMAX],B[NMAX],bza[NMAX],bzb[NMAX],sol;
FILE * f=fopen(fin,"r"), *g=fopen(fout,"w");
void read(int X[])
{
int i;
for(i=1;i<=X[0];++i)
fscanf(f,"%d",&X[i]);
}
void readData()
{
fscanf(f,"%d %d %d",&S[0],&A[0],&B[0]);
read(S);
read(A);
read(B);
fclose(f);
}
void qsort(int a[],int st,int dr)
{
int i=st,j=dr,p=a[(st+dr)/2];
while(i<j)
{
while(a[i]<p) ++i;
while(a[j]>p) --j;
if(i<=j)
{
int aux = a[i] ; a[i] = a[j] ; a[j] = aux;
++i; --j;
}
}
if(st<j) qsort(a,st,j);
if(i<dr) qsort(a,i,dr);
}
int bsearch(int X[],int st,int dr,int x)
{
int step = 1,p = st;
while(2 * step <= dr) step<<=1;
for(;step;step>>=1)
if(p + step <= dr & X[p]<x & X[p+step] <= x)
p+=step;
return p;
}
void get_ind(int X[],int ind[])
{
int i;
ind[0] = X[0];
for(i=1;i<=X[0];++i)
ind[i] = bsearch(S,1,S[0],X[i]) - 1; //baza S[0]
}
void sub(int X[],int Y[],int Z[])
{
Z[0] = X[0];
for(int i=1,t=0;i<=X[0];++i)
Z[i] += (t =(Z[i]=X[i]-Y[i]-t)<0) * S[0]; //scadere in baza S[0]
while(!Z[Z[0]] & Z[0]>1) --Z[0];
}
int pow[10];
void calculate()
{
pow[0] = 1;
for(int i=1;i<10 | pow[i]<=100;++i)
pow[i] = pow[i-1]*S[0];
}
void reverse(int X[])
{
for(int i=1;i<=X[0]/2;++i)
{
int aux = X[i]; X[i] = X[X[0]-i+1]; X[X[0]-i+1] = aux;
}
}
int getSol(int X[])
{
int baza=0;
for(int i=1;i<=X[0];++i)
baza+=X[i]*pow[i-1];
return baza;
}
void solve()
{
int D1[NMAX],D2[NMAX],res[NMAX],i,j;
if(bza[0]==bzb[0])
{
memset(res,0,sizeof res);
sub(bzb,bza,res);
sol = getSol(res);
if(sol>=1) --sol;
return;
}
memset(D1,0,sizeof D1);
memset(res,0,sizeof res);
D1[0]=bza[0];
for(i=1;i<=bza[0];++i)
D1[i]=S[0]-1;
sub(D1,bza,res);
sol+=getSol(res);
for(i=bza[0]+1;i<bzb[0];++i)
{
memset(D1,0,sizeof D1);
memset(D2,0,sizeof D2);
D1[0]=D2[0]=i;
for(j=1;j<=i;++j)
D1[j] = 0 , D2[j]=S[0]-1;
memset(res,0,sizeof res);
sub(D2,D1,res);
sol+=getSol(res)+1;
}
memset(D2,0,sizeof D2);
D2[0]=bzb[0];
memset(res,0,sizeof res);
sub(bzb,D2,res);
sol+=getSol(res);
}
void writeData()
{
fprintf(g,"%d",sol);
fclose(g);
}
int main()
{
readData();
qsort(S,1,S[0]);
get_ind(A,bza);
reverse(bza);
get_ind(B,bzb);
reverse(bzb);
calculate();
solve();
writeData();
return 0;
}