#include <bits/stdc++.h>
long long int l;
int n, d;
int a[100010], p[100010], b[100010], c[100010];
int i, j;
void swap(int *x, int *y) {
  int tmp = *x;
  *x = *y;
  *y = tmp;
  return;
}
int getNextX() {
  l = (l * 37 + 10007) % 1000000007;
  return l;
}
void initAB() {
  for (i = 0; i < n; i = i + 1) a[i] = i + 1;
  for (i = 1; i <= n; i++) p[i] = i - 1;
  for (i = 0; i < n; i = i + 1) {
    int k = getNextX() % (i + 1);
    swap(&a[i], &a[k]);
    swap(&p[a[i]], &p[a[k]]);
  }
  for (i = 0; i < n; i = i + 1) {
    if (i < d)
      b[i] = 1;
    else
      b[i] = 0;
  }
  for (i = 0; i < n; i = i + 1) swap(&b[i], &b[getNextX() % (i + 1)]);
  return;
}
int main() {
  scanf("%d%d%lld", &n, &d, &l);
  initAB();
  if (d > 500) {
    for (i = n - 1; i >= 0; i--) {
      for (j = n; j >= 1; j--)
        if (i >= p[j] && b[i - p[j]]) {
          c[i] = j;
          break;
        }
    }
  } else {
    for (i = 0; i < n; i++) {
      if (b[i] == 0) continue;
      for (j = 0; j < n - i; j++)
        if (a[j] > c[i + j]) c[i + j] = a[j];
    }
  }
  for (i = 0; i < n; i++) printf("%d\n", c[i]);
  return 0;
}
