#include<cstdio>
#include<iostream>
using namespace std;
const int MAXN = 712;
unsigned long long n, a[MAXN + 1];
unsigned long long pos[10000001];
namespace Generator {
unsigned long long k1, k2;
unsigned long long thres;
inline unsigned long long xorShift128Plus() {
unsigned long long k3 = k1, k4 = k2;
k1 = k4, k3 ^= (k3 << 23), k2 = k3 ^ k4 ^ (k3 >> 17) ^ (k4 >> 26);
return k2 + k4;
}
inline void generate() {
for (unsigned long long i = 1; i <= n; ++i) {
a[i] = xorShift128Plus() % thres;
}
}
}
int main() {
scanf("%d", &n);
scanf("%llu %llu %d", &Generator::k1, &Generator::k2, &Generator::thres);
Generator::generate();
a[0]=2147483647;
for(unsigned long long i=n;i;--i) pos[i]=(a[i]<a[pos[i+1]]?i:pos[i+1]);
for(unsigned long long i=1;i<=n;++i)
{
if(a[i]==a[pos[i]]) continue;
swap(a[i],a[pos[i]]),i=pos[i];
}
unsigned long long ans=0;
for(unsigned long long i=1;i<=n;++i) ans+=(unsigned long long)i*(unsigned long long)a[i];
printf("%llu",ans);
return 0;
}