#include<bits/stdc++.h>
#define ll long long
#define MOD 1000000007
using namespace std;
vector a, b, c;
ll k;
vector<vector> multiply(vector<vector> A, vector<vector> B){
//Matrix to store the result
vector<vector<ll>> C(k, vector<ll>(k));
for(int i=0;i<k;i++){
for(int j=0;j<k;j++){
for(int x=0;x<k;x++){
C[i][j] = (C[i][j] + (A[i][x]*B[x][j])%MOD)%MOD;
}
}
}
return C;
}
vector<vector> pow(vector<vector> &T, ll p){
if(p==1){
return T;
}
if(p&1){
return multiply(T, pow(T, p-1));
}
else{
vector<vector<ll>> X = pow(T, p/2);
return multiply(X, X);
}
}
ll compute(ll n){
if(n==0){
return 0;
}
if(n<=k){
return b[n-1];
}
//otherwise using matrix exponentiation
vector<ll> F1(k);
//Indexing from 1
for(int i=0;i<k;i++){
F1[i] = b[i];
}
vector<vector<ll>> T(k, vector<ll>(k));
for(int i=0;i<k;i++){
for(int j=0;i<k;j++){
if(i<k){
if(j == i+1){
T[i][j] = 1;
}
else{
T[i][j] = 0;
}
}
else{
T[i][j] = c[k-j-1];
}
}
}
T = pow(T, n-1);
ll ans=0;
for(int i=0;i<k;i++){
ans = ans + (T[0][i]*F1[i]%MOD)%MOD;
}
return ans;
}
int main(){
ll t, n ,num;
cin>>t;
while(t--){
cin>>k;
// F1 vector
for(int i=0;i<k;i++){
cin>>num;
b.push_back(num);
}
//coefficients
for(int i=0;i<k;i++){
cin>>num;
c.push_back(num);
}
//value of n (nth term to be computed in sequence)
cin>>n;
cout<<compute(n)<<endl;
b.clear();
c.clear();
}
return 0;
}