#include <fstream>
#include <iostream>
#include <stdarg.h>
#include <vector>
#include <string>
#include <sstream>
using namespace std;
const int M = 666013;
class matrix: vector < vector <int> > {
private:
int l,c;
public:
matrix();
matrix(int l, int c, ...);
matrix operator*(matrix);
int get(int i, int j);
string toString();
};
matrix::matrix()
{
l = c = 0;
}
matrix::matrix(int l, int c, ...)
{
va_list vl;
this->l = l;
this->c = c;
this->resize(l);
va_start(vl, c);
for (int i = 0; i < l; ++i ){
(*this)[i].resize(c);
for (int j = 0; j < c; j++){
(*this)[i][j] = va_arg(vl, int);
}
}
va_end(vl);
}
matrix matrix::operator*(matrix m)
{
matrix ret;
ret.l = this->l;
ret.c = m.c;
ret.resize(this->l);
for (int i = 0; i < this->l; ++i){
ret[i].resize(m.c);
for (int j = 0; j < m.c; ++j){
long long s = 0;
for (int k = 0; k < m.l; ++k){
s += ( (long long) (*this)[i][k] * m[k][j]) % M;
}
ret[i][j] = s % M;
}
}
return ret;
}
int matrix::get(int i, int j){
return (*this)[i][j];
}
string matrix::toString(){
string ret("value: ");
for (int i = 0 ; i<l; ++i){
ret.append("\n");
for (int j = 0; j<c; ++j){
stringstream out;
out << (*this)[i][j] << " ";
ret.append(out.str());
}
}
return ret;
}
int sol (int A, int B, int C, int X, int Y, int Z, int N)
{
matrix a0 = matrix(3, 1, X, Y, Z);
matrix a = matrix(3, 3, 0, 1, 0, 0, 0, 1, C, B, A);
matrix ret = matrix(3,3, 1, 0, 0, 0, 1, 0, 0, 0, 1);
for (int i = 0; (1 << i) <= N; ++i)
{
if (((1 << i) & N) > 0)
{
ret = ret * a;
}
a = a * a;
}
matrix final = ret * a0;
return final.get(0, 0);
}
int main()
{
int T, A, B, C, X, Y, Z, N;
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
fin >> T;
for (; T > 0; --T){
fin >> A >> B >> C >> X >> Y >> Z >> N;
fout << sol(A, B, C, X, Y , Z, N) << endl;
}
fin.close();
fout.close();
return 0;
}