#include<fstream>
#include<cstring>
using namespace std;
const int dim=65535;
int i,a[2][10000005],n,index[65540],indc=1,indp=0,bucket[65540];
long long aa,b,c;
int getbyte(int x, int nr) {
if (nr==1) return(x&65535);
else {
x>>=16;
return(x&65535);
}
}
void countsort(int nr){
memset(bucket,0,sizeof(bucket));
for (i=1; i<=n; ++i) ++bucket[getbyte(a[indp][i],nr)];
index[0]=0;
for (i=1; i<=dim; ++i) index[i]=index[i-1]+bucket[i-1];
for (i=1; i<=n; ++i) a[indc][ ++index[getbyte(a[indp][i],nr)] ]=a[indp][i];
}
int main(void) {
ifstream fin("radixsort.in");
ofstream fout("radixsort.out");
fin>>n>>aa>>b>>c;
a[indp][1]=b;
for (i=2; i<=n; ++i) a[indp][i]=(aa*(long long)a[indp][i-1]+b)%c;
/* fin>>n;
for (i=1; i<=n; ++i) fin>>a[indp][i];*/
countsort(1);
swap(indc,indp);
countsort(2);
for (i=1; i<=n; i+=10) fout<<a[indc][i]<<" ";
return(0);
}