#include<bits/stdc++.h>
using namespace std;
#define int __int128
inline __int128 read(){
char ch=getchar();
__int128 res=0,f=1;
for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
for(;ch>='0'&&ch<='9';ch=getchar())res=(res<<3)+(res<<1)+(ch-'0');
return res*f;
}
void write(__int128 x){
if(x<0) putchar('-'),x=-x;
if(x>9) write(x/10);
putchar(x%10+'0');
return;
}
int m,a,c,x0,n,g,x,y;
int exgcd(int a,int b){
if(b==0){
x=1;
y=0;
return a;
}
int d=exgcd(b,a%b);
int Next_x=x;
x=y;
y=Next_x-a/b*y;
return d;
}
int phi(int n){
int ans=n;
for(int i=2;i<=sqrt((long long)n);i++){
if(n%i==0){
ans=ans/i*(i-1);
while(n%i==0) n/=i;
}
}
if(n>1) ans=ans/n*(n-1);
return ans;
}
__int128 qMul(__int128 a,__int128 b,__int128 mod){
__int128 ans=0;
while(b){
if(b&1) ans=(ans+a)%mod;
a=(a+a)%mod;
b>>=1;
}
return ans;
}
int qpow(int A,int b){
int ans=1;
while(b){
if(b&1) ans=ans*A%m;
A=A*A%m;
b>>=1;
}
return ans;
}
main(){
m=read(),a=read(),c=read(),x0=read(),n=read(),g=read();
if(n<=1e8){
for(int i=1;i<=n;i++){
x0=(a*x0+c)%m;
}
write(x0%g);
}
else{
exgcd(a-1,m);
write(((qpow(a,n)*x0%m+c%m*(((qpow(a,n)==0?m-1:qpow(a,n)-1))%m+m)%m*x%m)%m+m)%m%g);
}
}