#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#define LL long long
using namespace std;
int n, d, mod;
int f[20], a[20];
class Matrix{
public:
int m;
LL a[20][20];
Matrix(int x, LL Y[20][20])
: m(x){
for(int i = 1; i <= m; i++)
for(int j = 1; j <= m; j++)
a[i][j] = Y[i][j];
}
Matrix(int x)
: m(x){
for(int i = 1; i <= m; i++)
for(int j = 1; j <= m; j++){
if(i == j) a[i][j] = 1;
else a[i][j] = 0;
}
}
Matrix FastPower(int tim);
Matrix& operator *= (const Matrix& m2);
};
Matrix&
Matrix::operator *= (const Matrix& m2){
LL temp[20][20];
memset(temp, 0, sizeof(temp));
for(int i = 1; i <= m; i++)
for(int j = 1; j <= m; j++)
for(int k = 1; k <= m; k++)
{
LL c = a[i][k] * m2.a[k][j] % mod;
temp[i][j] += c;
temp[i][j] %= mod;
}
for(int i = 1; i <= m; i++)
for(int j = 1; j <= m; j++)
a[i][j] = temp[i][j];
return (*this);
}
Matrix
Matrix::FastPower(int tim)
{
Matrix ans(m);
Matrix temp = (*this);
while(tim)
{
if(tim & 1)
ans *= temp;
temp *= temp;
tim >>= 1;
}
return ans;
}
int main()
{
//freopen("zztest.txt","r",stdin);
while(scanf("%d%d%d", &d, &n, &mod))
{
LL b[20][20];
memset(b, 0, sizeof(b));
if(d == 0 && n == 0 && mod ==0)
break;
for(int i = 1; i <= d; i++)
scanf("%d", &a[i]);
for(int i = 1; i <= d; i++)
scanf("%d", &f[i]);
for(int i = 1; i <= d-1; i++)
b[i][i+1] = 1;
for(int i = 1; i <= d; i++)
b[d][i] = a[d-i+1];
Matrix k(d, b);
Matrix factor = k.FastPower(n-d);
LL ans = 0;
for(int i = 1; i <= d; i++)
{
LL temp = factor.a[d][i] * f[i] % mod;
ans += temp;
ans %= mod;
}
printf("%lld\n", ans);
}
return 0;
}