#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;
}