#include<stdio.h>
struct nod{ int info;nod *next;};
nod *prim[1000],*ultim[1000];
long long int tt0,tt1,aa,bb,cc,dd,ee,mm,nn,ii,
aaux,ss1,ss0,lred,npred,cat,ltred;
int m,i,ok,t0,t1,tc0,tc1,tc00,tc11,gata,aux,sum[2000],term1[1000],term2[1000];
int pune(int tp1,int tp0);
int main()
{
FILE *f,*g;
f=fopen("rsir.in","r");
g=fopen("rsir.out","w");
fscanf(f,"%lld%lld",&tt0,&tt1);
fscanf(f,"%lld%lld",&aa,&bb);
fscanf(f,"%lld%lld%lld",&cc,&dd,&ee);
fscanf(f,"%lld%lld",&mm,&nn);
aa=aa%mm;bb=bb%mm;
cc=cc%mm;dd=dd%mm;ee=ee%mm;
tt0=tt0%mm;t0=(int)tt0;
tt1=tt1%mm;t1=(int)tt1;
m=(int)mm;
for(i=0;i<2*m;i++)sum[i]=i%m;
term1[0]=(int)ee;
for(i=1;i<m;i++){ ii=(long long int)i;aaux=(aa*ii*ii+cc*ii+ee)%mm;term1[i]=(int)aaux;aaux=(bb*ii*ii+dd*ii)%mm;term2[i]=(int)aaux;}
tc0=t0;tc1=t1;
for(;;)
{ if(ss1==nn) {gata=1;break;}
ok=pune(tc0,tc1);
if(!ok)break;
ss1++;
aux=term1[tc0]+term2[tc1];
aux=sum[aux];
tc0=tc1;
tc1=aux;
}
if(gata)
{
fprintf(g,"%d\n",tc0);
fcloseall();
return 0;
}
tc00=t0;tc11=t1;
for(;;)
{ if(tc00==tc0&&tc11==tc1)break;
ss0++;
aux=term1[tc00]+term2[tc11];
aux=sum[aux];
tc00=tc11;
tc11=aux;
}
lred=ss1-ss0;
npred=(nn-ss0)/cat;
ltred=npred*lred;
nn=nn-ltred;
for(ii=1;ii<=nn;ii++)
{
aux=term1[t0]+term2[t1];
aux=sum[aux];
t0=t1;
t1=aux;
}
fprintf(g,"%d\n",t0);
fcloseall();
return 0;
}
int pune(int tp1,int tp0)
{
nod *ppp;
ppp=new nod;
if(!prim[tp0])
{
ppp->info=tp1;
ppp->next=0;
prim[tp0]=ppp;
ultim[tp0]=ppp;
return 1;
}
ppp=prim[tp0];
while(ppp)
{ if(ppp->info==tp1)
return 0;
ppp=ppp->next;
}
ppp->info=tp1;
ppp->next=0;
ultim[tp0]->next=ppp;
ultim[tp0]=ppp;
return 1;
}