#include<bits/stdc++.h>
using namespace std;
struct matrix
{
long long v[22][22];
} mat,ans;
long long d,n,mod,C[22],A[22];
matrix multiply(matrix a, matrix b)
{
matrix r;
for(int i=0; i<=d; i++)
{
for(int j=0; j<=d; j++)
{
long long sum = 0;
r.v[i][j] = 0;
for(int k=0; k<=d; k++)
{
sum+=a.v[i][k]*b.v[k][j];
sum%=mod;
}
r.v[i][j] = sum;
}
}
return r;
}
matrix power(long long p)
{
if(p==1)
{
return mat;
}
if(p%2==1)
{
return multiply(mat,power(p-1));
}
matrix ret = power(p/2);
ret = multiply(ret,ret);
return ret;
}
int main()
{
int test;
scanf("%d",&test);
while(test--)
{
scanf("%lld%lld%lld",&d,&mod,&n);
memset(mat.v,0,sizeof(mat.v));
for(int i=0; i<=d; i++)
{
scanf("%lld",&C[i]);
C[i] = C[i]<0 ? mod-((-C[i])%mod) : C[i]%mod;
}
for(int i=0; i<d; i++)
{
scanf("%lld",&A[i]);
A[i] = A[i]<0 ? mod-((-A[i])%mod) : A[i]%mod;
mat.v[0][i] = C[i];
}
mat.v[0][d] = 1;
for(int i = 1; i <d; ++i)
{
mat.v[i][i-1] = 1;
}
mat.v[d][d] = 1;
if(n<d)
printf("%lld\n",A[n]%mod);
else
{
long long res = 0;
ans = power(n-d+1);
for(int i=0; i<d; i++)
{
res += (A[d-i-1]*ans.v[0][i])%mod;
res = res%mod;
}
res+=(C[d]*ans.v[0][d])%mod;
res%=mod;
printf("%lld\n", res);
}
if(test)
puts("");
}
return 0;
}