#include <set>
#include <bitset>
#include <list>
#include <map>
#include <stack>
#include <queue>
#include <deque>
#include <string>
#include <vector>
#include <ios>
#include <iostream>
#include <fstream>
#include <sstream>
#include <iomanip>
#include <algorithm>
#include <utility>
#include <complex>
#include <numeric>
#include <functional>
#include <cmath>
#include <ctime>
#include <climits>
#include <cstdarg>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cctype>
#include <cassert>
using namespace std;
const int INF = 0x7FFFFFFF;
//const int MOD = 7;
const double EPS = 1e-10;
const double PI = 2 * acos (0.0);
const int maxn = 6;
long long n = 6;//表示方阵的尺寸,必须恰好为运算的大小
long long MOD;
//申请变量
struct Mat
{
long long mat[maxn][maxn];
};
//重载Mat乘法运算
Mat operator * (Mat a, Mat b)
{
Mat c;
memset (c.mat, 0, sizeof (c.mat));
for (long long k = 0; k < n; k++)
{
for (long long i = 0; i < n; i++)
{
if (a.mat[i][k] == 0) continue;
for (long long j = 0; j < n; j++)
{
if (b.mat[k][j] == 0) continue;
c.mat[i][j] = (c.mat[i][j] + ((a.mat[i][k] % MOD) * (b.mat[k][j] % MOD) % MOD)) % MOD;
}
}
}
return c;
}
//重载Mat乘幂运算
Mat operator ^ (Mat a, long long k)
{
Mat c;
for (long long i = 0; i < n; i++)
for(long long j = 0; j < n; j++)
c.mat[i][j] = (i == j);
while (k)
{
if(k & 1)
c = c * a;
a = a * a;
k >>= 1;
}
return c;
}
int main()
{
// ifstream cin ("aaa.txt");
// freopen ("aaa.txt", "r", stdin);
int t, flag = 1;
cin >> t;
while(t--)
{
cout << "Case " << flag++ << ":" << endl;
long long a1, b1, c1, a2, b2, c2, f0, f1, f2, g0, g1, g2;
cin >> a1 >> b1 >> c1 >> a2 >> b2 >> c2 >> f0 >> f1 >> f2 >> g0 >> g1 >> g2 >> MOD;
Mat aa, a0;
aa.mat[0][0] = a1, aa.mat[0][1] = b1, aa.mat[0][2] = 0, aa.mat[0][3] = 0, aa.mat[0][4] = 0, aa.mat[0][5] = c1;
aa.mat[1][0] = 1, aa.mat[1][1] = 0, aa.mat[1][2] = 0, aa.mat[1][3] = 0, aa.mat[1][4] = 0, aa.mat[1][5] = 0;
aa.mat[2][0] = 0, aa.mat[2][1] = 1, aa.mat[2][2] = 0, aa.mat[2][3] = 0, aa.mat[2][4] = 0, aa.mat[2][5] = 0;
aa.mat[3][0] = 0, aa.mat[3][1] = 0, aa.mat[3][2] = c2, aa.mat[3][3] = a2, aa.mat[3][4] = b2, aa.mat[3][5] = 0;
aa.mat[4][0] = 0, aa.mat[4][1] = 0, aa.mat[4][2] = 0, aa.mat[4][3] = 1, aa.mat[4][4] = 0, aa.mat[4][5] = 0;
aa.mat[5][0] = 0, aa.mat[5][1] = 0, aa.mat[5][2] = 0, aa.mat[5][3] = 0, aa.mat[5][4] = 1, aa.mat[5][5] = 0;
a0.mat[0][0] = f2, a0.mat[1][0] = f1, a0.mat[2][0] = f0, a0.mat[3][0] = g2, a0.mat[4][0] = g1, a0.mat[5][0] = g0;
int q;
cin >> q;
long long tt;
Mat res;
for (int i = 1; i <= q; i++)
{
cin >> tt;
// cout << tt << endl;
if (tt == 0)
cout << f0 % MOD << " " << g0 % MOD << endl;
else if (tt == 1)
cout << f1 % MOD << " " << g1 % MOD << endl;
else if (tt == 2)
cout << f2 % MOD << " " << g2 % MOD << endl;
else
{
res = aa ^ (tt - 2);
res = res * a0;
cout << res.mat[0][0] % MOD << " " << res.mat[3][0] % MOD << endl;
}
}
}
return 0;
}