rt.
#include<bits/stdc++.h>
using namespace std;
#define int long long
int a[10000010],s[10000010];
queue<int>x;
void generate_array(int n, int m, int seed) {
unsigned x = seed;
for (int i = 0; i < n; ++i) {
x ^= x << 13;
x ^= x >> 17;
x ^= x << 5;
a[i] = x % m + 1;
}
}
signed main(){
int n,m,seed;
cin>>n>>m>>seed;
generate_array(n,m,seed);
for(int i=0;i<n;i++){
s[a[i]]++;
}
for(int i=1;i<=m;i++){
while(s[i]){
x.push(i);
s[i]--;
}
}
while(1){
int a=x.front();
x.pop();
if(x.empty()){
cout<<a;
return 0;
}
int b=x.front();
x.pop();
x.push(max(min(a,b)*2,max(a,b)));
}
}