#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <climits>
using namespace std;
ifstream fin("iepuri.in");
ofstream fout("iepuri.out");
const int MOD = 666013;
int T, A, B, C, X, Y, Z, N;
class Matrix {
public:
Matrix(int x0, int x1, int x2, int y0, int y1, int y2, int z0, int z1, int z2) : data_(
{ vector<int>({x0, x1, x2}), vector<int>({y0, y1, y2}), vector<int>({z0, z1, z2}) }) {
};
Matrix operator*(Matrix const& other) {
Matrix result(0, 0, 0, 0, 0, 0, 0, 0, 0);
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
for (int t = 0; t < 3; ++t) {
result.data_[i][j] += static_cast<long long>(data_[i][t]) * other.data_[t][j] % MOD;
}
result.data_[i][j] %= MOD;
}
}
return result;
}
int Get(int x, int y) {
return data_[x][y];
}
private:
vector<vector<int>> data_;
};
int main()
{
fin >> T;
while (T--) {
fin >> X >> Y >> Z >> C >> B >> A >> N;
Matrix base(0, 0, A, 1, 0, B, 0, 1, C);
Matrix result(X, Y, Z, 0, 0, 0, 0, 0, 0);
const int power = N - 2;
for (int i = 0; (1 << i) <= power; ++i) {
if (power & (1 << i)) {
result = result * base;
}
base = base * base;
}
fout << result.Get(0, 2) << '\n';
}
return 0;
}