#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#define x first
#define y second
#define ld long double
#define ll long long
#define ull unsigned long long
#define us unsigned short
#define lsb(x) ((x) & (-(x)))
using namespace std;
ifstream in ("radixsort.in");
ofstream out ("radixsort.out");
int n, m, a, b, c;
ll k;
int v[10000005], w[10000005];
int cnt[256];
void radix(int n, int v[], int w[], int b) {
memset(cnt, 0, sizeof(cnt));
for(int i = 1; i <= n; i++)
cnt[v[i] >> b & 255]++;
for(int i = 255; i > 0; i--)
cnt[i] = cnt[i - 1];
cnt[0] = 0;
for(int i = 1; i <= 255; i++)
cnt[i] += cnt[i - 1];
for(int i = 1; i <= n; i++)
w[++cnt[v[i] >> b & 255]] = v[i];
}
int main() {
in >> n >> a >> b >> c;
for(int i = 1; i <= n; i++)
v[i] = (1LL * a * v[i - 1] + b) % c;
radix(n, v, w, 0);
radix(n, w, v, 8);
radix(n, v, w, 16);
radix(n, w, v, 24);
for(int i = 1; i <= n; i += 10)
out << v[i] << " ";
return 0;
}