#include<stdio.h>
using namespace std;
FILE *f,*g;
int a,b,x,y,z,M; long long n; //variabile din recurenta
int coada, perioada;
int aux[10000][2];
void read(void){
f=fopen("rsir.in","r");
g=fopen("rsir.out","w");
fscanf(f,"%d%d%d%d%d%d%d%d%lld",&aux[0][0],&aux[0][1],&a,&b,&x,&y,&z,&M,&n);
}
void sonra(int &v1, int &v2){
int v3= ((int)a*v1*v1+(int)b*v2*v2+(int)x*v1+(int)y*v2+z)%M;
v1=v2; v2=v3;
}
void find(void){
int a1=aux[0][0],a2=aux[0][1],b1=aux[0][0],b2=aux[0][1]; int tt;
perioada=1;
sonra(a1,a2); sonra(b1,b2); sonra(b1,b2);
while( a1 != b1 || a2 != b2){
++perioada;
sonra(a1,a2), sonra(b1,b2); sonra(b1,b2);
if (perioada%5000 == 0) {tt=perioada/10000; aux[tt][0]=b1; aux[tt][1]=b2; }
}
a1=aux[0][0]; a2=aux[0][1];
while( a1 != b1 || a2 != b2) {
coada++;
sonra(a1,a2); sonra(b1,b2);
}
}
int gaseste (int poz){
int tt;
tt=poz/10000;
int i; int a1=aux[tt][0], a2=aux[tt][1];
for(i=1; i <= poz - tt *10000 ; i++) sonra(a1,a2);
return a1;
}
int truegaseste (long long poz){
if (poz <= coada) return gaseste(poz);
else return gaseste(coada+ (poz-coada)%perioada);
}
int main(void){
read();
find();
fprintf(g,"%d",truegaseste(n));
return 0;
}