#include <bits/stdc++.h>
using namespace std;
long long N; 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 = ( 1LL * a * val1 * val1 + 1LL * b * val2 * val2 + c * val1 + d * val2 + e ) % 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 );
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 );
if( N == 0 )
fprintf( output_file, "%d\n", val1 );
else if( N <= M * M ) {
A.set_node( val1, val2 );
for( int i = 2; i <= N; i ++ )
A.next_node();
fprintf( output_file, "%d\n", A.val2 );
} 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 );
C.set_node( A.val1, A.val2 );
C.next_node(); len = 1;
while( A.val1 != C.val1 || A.val2 != C.val2 ) {
len ++;
C.next_node();
}
A.set_node( val1, val2 );
B.set_node( val1, val2 );
for( int i = 2; i <= len; i ++ )
B.next_node();
while( A.val1 != B.val1 || A.val2 != B.val2 ) {
tail ++;
A.next_node();
B.next_node();
}
N = ( N - tail ) % len;
for( int i = 1; i <= N; i ++ )
A.next_node();
fprintf( output_file, "%d\n", A.val2 );
}
return 0;
}