1 #include<iostream>
2 #include<cstdio>
3 #include<queue>
4 #include<algorithm>
5 #include<cmath>
6 #include<ctime>
7 #include<set>
8 #include<map>
9 #include<stack>
10 #include<cstring>
11 #define inf 2147483647
12 #define ls rt<<1
13 #define rs rt<<1|1
14 #define lson ls,nl,mid,l,r
15 #define rson rs,mid+1,nr,l,r
16 #define N 100010
17 #define For(i,a,b) for(long long i=a;i<=b;i++)
18 #define p(a) putchar(a)
19 #define g() getchar()
20
21 using namespace std;
22 long long aa,bb,n,mod,tt;
23 double t;
24 struct matrix{
25 long long a[5];
26 long long b[5][5];
27 matrix operator *(const matrix&c)const{
28 matrix r;
29 For(i,1,2)
30 For(j,1,2){
31 r.b[i][j]=0;
32 For(k,1,2)
33 r.b[i][j]=(r.b[i][j]+b[i][k]*c.b[k][j]%mod)%mod;
34 }
35 return r;
36 }
37 }a;
38
39 void in(long long &x){
40 long long y=1;
41 char c=g();x=0;
42 while(c<'0'||c>'9'){
43 if(c=='-')y=-1;
44 c=g();
45 }
46 while(c<='9'&&c>='0'){
47 x=(x<<1)+(x<<3)+c-'0';c=g();
48 }
49 x*=y;
50 }
51 void o(long long x){
52 if(x<0){
53 p('-');
54 x=-x;
55 }
56 if(x>9)o(x/10);
57 p(x%10+'0');
58 }
59
60 matrix ksm(matrix a,long long b){
61 matrix r=a;
62 b--;
63 if(b==0) return r;
64 while(b%2==0){
65 a=a*a;
66 b>>=1;
67 }
68 while(b>0){
69 if(b%2==1)
70 r=r*a;
71 a=a*a;
72 b>>=1;
73 }
74 return r;
75 }
76
77 int main(){
78 while(cin>>aa>>bb>>n>>mod){
79 if(n==0){
80 o((long long)1%mod);p('\n');
81 continue;
82 }
83 a.a[1]=1;
84 a.a[2]=0;
85 a.b[1][1]=aa%mod;
86 a.b[1][2]=bb%mod;
87 a.b[2][1]=1;
88 a.b[2][2]=aa%mod;
89 matrix r,ans;
90 r=ksm(a,n);
91 For(i,1,2){
92 ans.a[i]=0;
93 For(k,1,2)
94 ans.a[i]=(ans.a[i]+a.a[k]*r.b[i][k]%mod)%mod;
95 }
96 tt=0;
97 tt=(tt+ans.a[1])%mod;
98 o((2*tt%mod+mod)%mod);p('\n');
99 }
100 return 0;
101 }