#include<cstdio>
#include<algorithm>
#include<set>
#include<vector>
#define int long long
#define ct Chtholly_tree
#define Chtholly set<Chtholly_tree>::iterator
#define N 1919810
using namespace std;
int n,m,seed,vmax,a[N];
struct Chtholly_tree{
int l,r;
mutable int val;
ct(int a=-1,int b=-1,int c=0){l=a,r=b,val=c;}
bool operator <(const ct &a)const{return l<a.l;}
};
set<Chtholly_tree> st;
int qpow(int a,int b,int mod){
int res = 1;
int ans = a % mod;
while (b){
if (b&1) res = res * ans % mod;
ans = ans * ans % mod;
b>>=1;
}
return res;
}
void insert(int p,int x){
st.insert(ct(p,p,x));
}
Chtholly split(int p){
Chtholly it=st.lower_bound(ct(p));
if(it!=st.end()&&it->l==p)return it;
it--;ct tmp=*it;st.erase(it);
st.insert(ct(tmp.l,p-1,tmp.val));
return st.insert(ct(p,tmp.r,tmp.val)).first;
}
void assign(int l,int r,int val){
Chtholly right=split(r+1),left=split(l);
st.erase(left,right);
st.insert(ct(l,r,val));
}
void add(int l,int r,int val){
Chtholly right=split(r+1),left=split(l);
for(;left!=right;left++)left->val+=val;
}
int sum(int l,int r,int ex,int md){
int ans=0;
Chtholly right=split(r+1),left=split(l);
for(;left!=right;left++)ans=ans+(left->r-left->l+1)*qpow(left->val,ex,md)%md;
return ans;
}
int kth(int l,int r,int k){
int ans=0;
vector<pair<int ,int > >v;
Chtholly right=split(r+1),left=split(l);v.clear();
for(;left!=right;left++)v.push_back({left->val,left->r-left->l+1});
sort(v.begin(),v.end());
for(vector<pair<int,int> >::iterator it=v.begin();it!=v.end();it++){
k-=it->second;
if(k<=0)return it->first;
}
return -1;
}
int rnd(){
int ret = seed;
seed = (seed * 7 + 13) %1000000007;
return ret;
}
signed main(){
scanf("%lld%lld%lld%lld",&n,&m,&seed,&vmax);
for(int i=1;i<=n;i++)st.insert(ct(i,i,((rnd()%vmax)+1)));
insert(n+1,0);
for(int i=1;i<=m;i++){
int op=(rnd()%4)+1,l=(rnd()%n)+1,r=(rnd()%n)+1,x=0,y=0;
if(l>r)swap(l,r);
if(op==3)x=(rnd()%(r-l+1))+1;
else x=(rnd()%vmax)+1;
if(op==4)y=(rnd()%vmax)+1;
if(op==1)add(l,r,x);
if(op==2)assign(l,r,x);
if(op==3)printf("%lld\n",kth(l,r,x));
if(op==4)printf("%lld\n",sum(l,r,x,y));
}
return 0;
}