#include <cstdio>
#include <fstream>
#define FIN "iepuri.in"
#define FOUT "iepuri.out"
const long long P=666013;
long long M[4][4];
long long M0[4][4];
long long T, N, X, Y, Z, A, B, C;
void MULT1()
{
long long i,j,k,s;
long long X[4][4];
memset(X,0,sizeof(X));
for (i = 1; i <= 3; ++i)
for (j = 1; j <= 3; ++j)
{
s = 0;
for (k = 1; k <= 3; ++k)
s+=(M[i][k]*M[k][j]) % P;
X[i][j] = s % P;
}
memcpy(M,X,sizeof(X));
for (i = 1; i <= 3; ++i)
for (j = 1; j <= 3; ++j)
{
s = 0;
for (k = 1; k <= 3; ++k)
s+=(M[i][k]*M0[k][j]) % P;
X[i][j] = s % P;
}
memcpy(M,X,sizeof(X));
}
void MULT2()
{
long long i,j,k,s;
long long X[4][4];
memset(X,0,sizeof(X));
for (i = 1; i <= 3; ++i)
for (j = 1; j <= 3; ++j)
{
s = 0;
for (k = 1; k <= 3; ++k)
s+=(M[i][k]*M[k][j]) % P;
X[i][j] = s % P;
}
memcpy(M,X,sizeof(X));
}
void solve ()
{
long long Bit[100], k = 0;
long long i, j, s;
memset (Bit, 0, sizeof (Bit));
while (N)
{
Bit[++k] = N%2;
N>>=1;
}
// initializez matricea
memset (M0, 0, sizeof (M0));
M0[1][2] = 1; M0[2][3] = 1; M0[3][1] = C; M0[3][2] = B; M0[3][3] = A;
memcpy(M, M0, sizeof (M));
for (i = k - 1; i; --i)
if (Bit[i]) MULT1();
else MULT2();
long long Sol;
Sol = (M[1][1] * X)%P;
Sol = (Sol + M[1][2] * Y)%P;
Sol = (Sol + M[1][3] * Z)%P;
printf ("%lld\n", Sol);
}
int main ()
{
freopen (FIN, "r", stdin);
freopen (FOUT, "w", stdout);
scanf ("%lld", &T);
while (T)
{
scanf ("%lld %lld %lld %lld %lld %lld %lld", &X, &Y, &Z, &A, &B, &C, &N);
solve ();
--T;
}
return 0;
}