#include<bits/stdc++.h>
#define ull unsigned long long
using namespace std;
const int maxn=1e7;
int n,thres,a[maxn+1],minx[maxn+1];
ull ans,k1,k2;
inline ull xorShift128Plus(){
ull k3=k1,k4=k2;
k1=k4,k3^=(k3<<23),k2=k3^k4^(k3>>17)^(k4>>26);
return k2+k4;
}
inline void generate(){
for(int i=1;i<=n;++i)
a[i]=xorShift128Plus()%thres;
}
int main(){
scanf("%d%llu%llu%d",&n,&k1,&k2,&thres);
generate();
minx[n]=n;
for(int i=n-1;i;--i){
minx[i]=minx[i+1];
if(a[i]<a[minx[i]])
minx[i]=i;
}
int k=1;
while(k<=n){
swap(a[k],a[minx[k]]);
k=minx[k]+1;
}
for(ull i=1;i<=n;++i)
ans+=i*a[i];
printf("%llu\n",ans);
return 0;
}