#include using namespace std; const unsigned long long mod = 1e18; unsigned long long n; unsigned long long mul(unsigned long long a, unsigned long long b) { unsigned long long res = 0; while (b) { if (b & 1) res = (res + a) % mod; a = (a << 1) % mod; b >>= 1; } return res; } struct matrix { unsigned long long f[4][4]; matrix() { memset(f, 0x00, sizeof(f)); } void init() { for (int i = 0; i < 4; i++) { f[i][i] = 1; } } matrix operator*(matrix b) { matrix res; for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { for (int k = 0; k < 4; k++) { res[i][j] = (res[i][j] + mul(f[i][k], b[k][j])) % mod; } } } return res; } matrix operator^(unsigned long long b) { matrix t; t.init(); while (b) { if (b & 1) t = t * *this; *this = *this * *this; b >>= 1; } return t; } unsigned long long* operator[](int x) { return f[x]; } } a, b; int main() { cin >> a[0][2] >> a[0][1] >> a[0][0]; cin >> b[0][0] >> b[1][0] >> b[2][0]; cin >> a[0][3] >> n; b.f[0][1] = b.f[1][2] = b.f[3][0] = b.f[3][3] = 1; if (n <= 2) { cout << a[0][2 - n] << endl; exit(0); } int len = 0; a = a * (b ^ (n - 2)); for (int i = 0; i < 18 - to_string(a[0][0]).size(); i++) { cout << 0; } cout << a[0][0] << endl; return 0; }