#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
using namespace std;
#define ll long long
ll f[20],mod;
struct Matrix
{
ll v[20][20];
Matrix()
{
memset(v,0,sizeof v);
}
}m,k,t;
Matrix mul(Matrix a,Matrix b,int d)
{
Matrix sum;
for(int i=1; i<=d; i++)
{
for(int j=1; j<=d; j++)
{
for(int k=1; k<=d; k++)
{
sum.v[i][j]+=a.v[i][k]*b.v[k][j];
sum.v[i][j]%=mod;
}
}
}
return sum;
}
Matrix pow(Matrix a,int n,int d)
{
Matrix sum=k;
while(n)
{
if(n&1) sum=mul(sum,a,d);
n>>=1;
a=mul(a,a,d);
}
return sum;
}
int main()
{
int d,n;
while(~scanf("%d %d %lld",&d,&n,&mod))
{
if(!d&&!n&&!mod) break;
for(int i=1;i<=d;i++)
{
scanf("%lld",&m.v[i][1]);
m.v[i][1]%=mod;
}
for(int i=1;i<=d;i++)
m.v[i][i+1]=1;
for(int i=1;i<=d;i++)
{
scanf("%lld",&f[i]);
f[i]%=mod;
}
if(n<=d) {printf("%lld\n",f[n]);continue;}
for(int i=1;i<=d;i++)
k.v[i][i]=1;
t=pow(m,n-d,d);
ll ans=0;
for(int i=1;i<=d;i++)
{
ans+=t.v[i][1]*f[d+1-i];
ans%=mod;
}
printf("%lld\n",ans);
}
return 0;
}