#include <bits/stdc++.h>
const int DIM = 1 << 13;
using namespace std;
long long N; int V1[DIM], V2[DIM];
int a, b, c, d, e, M, val1, val2, len, tail;
struct node {;
int val1, val2, a, b, c, d, e, MOD;
node( int _a, int _b, int _c, int _d, int _e, int _MOD ) {
a = _a; b = _b; c = _c; d = _d; e = _e;
MOD = _MOD; val1 = 0; val2 = 0;
}
void set_node( int _val1, int _val2 ) {
val1 = _val1; val2 = _val2;
return;
}
void next_node() {
int val3 = V1[val1] + V2[val2] + e;
if( val3 >= MOD ) val3 -= MOD;
if( val3 >= MOD ) val3 -= MOD;
val1 = val2; val2 = val3;
return;
}
};
int main() {
FILE *input_file = fopen( "rsir.in" , "r" );
FILE *output_file = fopen( "rsir.out", "w" );
fscanf( input_file, "%d %d %d %d %d %d %d %d %lld", &val1, &val2, &a, &b, &c, &d, &e, &M, &N );
a %= M; b %= M; c %= M; d %= M; e %= M; val1 %= M; val2 %= M;
node A( a, b, c, d, e, M ), B( a, b, c, d, e, M ), C( a, b, c, d, e, M );
for( int i = 0; i < M; i ++ ) {
V1[i] = ( 1LL * a * i * i + c * i ) % M;
V2[i] = ( 1LL * b * i * i + d * i ) % M;
}
if( N == 0 )
fprintf( output_file, "%d\n", val1 );
else {
A.set_node( val1, val2 );
B.set_node( val1, val2 );
do {
A.next_node();
B.next_node();
B.next_node();
} while( A.val1 != B.val1 || A.val2 != B.val2 );
do {
len ++;
A.next_node();
} while( A.val1 != B.val1 || A.val2 != B.val2 );
A.set_node( val1, val2 );
B.set_node( val1, val2 );
for( int i = 1; i <= len; i ++ )
B.next_node();
while( A.val1 != B.val1 || A.val2 != B.val2 ) {
tail ++;
A.next_node();
B.next_node();
}
if( N < tail ) {
A.set_node( val1, val2 );
for( int i = 1; i <= N; i ++ )
A.next_node();
} else {
N = ( N - tail ) % len;
for( int i = 1; i <= N; i ++ )
A.next_node();
}
fprintf( output_file, "%d\n", A.val1 );
}
return 0;
}