#include <cstdio>
int nthDigit(int n, int x) {
while(n-- > 1)
x /= 10;
return x % 10;
}
int numDigits(int n) {
int rez = 0;
while(n) {
++rez;
n /= 10;
}
return rez;
}
int v[10000005],
bucket0[100005], bucket1[100005], bucket2[100005], bucket3[100005],
bucket4[100005], bucket5[100005], bucket6[100005],
bucket7[100005], bucket8[100005], bucket9[100005];
int main() {
int n, a, b, c, max, temp, i, j, cnt, cnt0, cnt1, cnt2, cnt3, cnt4, cnt5, cnt6, cnt7, cnt8, cnt9;
freopen("radixsort.in", "r", stdin);
freopen("radixsort.out", "w", stdout);
scanf("%d%d%d%d", &n, &a, &b, &c);
v[1] = b;
max = numDigits(b);
for(i = 2; i <= n; ++i) {
v[i] = (1LL * a * v[i-1] + b) % c;
temp = numDigits(v[i]);
if(temp > max)
max = temp;
}
for(i = 1; i <= max; ++i) {
cnt = cnt0 = cnt1 = cnt2 = cnt3 = cnt4 = cnt5 = cnt6 = cnt7 = cnt8 = cnt9 = 0;
for(j = 1; j <= n; ++j)
if(nthDigit(i, v[j]) == 1)
bucket1[++cnt1] = v[j];
else if(nthDigit(i, v[j]) == 2)
bucket2[++cnt2] = v[j];
else if(nthDigit(i, v[j]) == 3)
bucket3[++cnt3] = v[j];
else if(nthDigit(i, v[j]) == 4)
bucket4[++cnt4] = v[j];
else if(nthDigit(i, v[j]) == 5)
bucket5[++cnt5] = v[j];
else if(nthDigit(i, v[j]) == 6)
bucket6[++cnt6] = v[j];
else if(nthDigit(i, v[j]) == 7)
bucket7[++cnt7] = v[j];
else if(nthDigit(i, v[j]) == 8)
bucket8[++cnt8] = v[j];
else if(nthDigit(i, v[j]) == 9)
bucket9[++cnt9] = v[j];
else
bucket0[++cnt0] = v[j];
for(j = 1; j <= cnt0; ++j)
v[++cnt] = bucket0[j];
for(j = 1; j <= cnt1; ++j)
v[++cnt] = bucket1[j];
for(j = 1; j <= cnt2; ++j)
v[++cnt] = bucket2[j];
for(j = 1; j <= cnt3; ++j)
v[++cnt] = bucket3[j];
for(j = 1; j <= cnt4; ++j)
v[++cnt] = bucket4[j];
for(j = 1; j <= cnt5; ++j)
v[++cnt] = bucket5[j];
for(j = 1; j <= cnt6; ++j)
v[++cnt] = bucket6[j];
for(j = 1; j <= cnt7; ++j)
v[++cnt] = bucket7[j];
for(j = 1; j <= cnt8; ++j)
v[++cnt] = bucket8[j];
for(j = 1; j <= cnt9; ++j)
v[++cnt] = bucket9[j];
}
for(i = 1; i <= n; i += 10)
printf("%d ", v[i]);
}