#include<stdio.h>
long T0,T1,a,b,x,y,z,M,n,t0,t1,T11,T22;
void citire()
{
freopen("rsir.in","r",stdin);
scanf("%ld%ld%ld%ld%ld%ld%ld%ld%ld",&T0,&T1,&a,&b,&x,&y,&z,&M,&n);
}
void gasire_ciclu()
{
//aici gasesc t0,t1,T11,T22
long i,j,T1i,T1j,T2i,T2j,T3; i=j=0;
T1i=T1j=T0;
T2i=T2j=T1;
do
{//incrementez icu 1
T3=(a*T1i*T1i+b*T2i*T2i+x*T1i+y*T2i+z)%M;
T1i=T2i;
T2i=T3;
i++;
//incrementez j cu 2
T3=(a*T1j*T1j+b*T2j*T2j+x*T1j+y*T2j+z)%M;
T1j=T2j;
T2j=T3;
T3=(a*T1j*T1j+b*T2j*T2j+x*T1j+y*T2j+z)%M;
T1j=T2j;
T2j=T3;
j+=2;
} while(T1i!=T1j||T2i!=T2j);
t0=j-i;
t1=i-1;
T11=T1i;
T22=T2i;
}
void rezolvare(long T1,long T2,long n)
{long i=2,T3;
freopen("rsir.out","w",stdout);
if(n==1)
{
printf("%ld",T1);
fclose(stdout);
return;
}
else if(n==2)
{printf("%ld",T2);
fclose(stdout);
return;
}
while(i<n)
{
T3=(a*T1*T1+b*T2*T2+x*T1+y*T2+z)%M;
T1=T2;
T2=T3;
i++;
}
printf("%ld",T2);
fclose(stdout);
return ;
}
int main()
{
citire();
gasire_ciclu();
if(n>t1)
{
n=(n-t1)%t0;
if(!n) n=t0;
rezolvare(T11,T22,n);
}
else
rezolvare(T0,T1,n+1);
return 0;
}