#include <bits/stdc++.h>
using namespace std;
long long x;
inline long long getNextX() {
  x = (x * 37 + 10007) % 1000000007;
  return x;
}
const int maxn = 100000 + 10;
int n, d;
int a[maxn], b[maxn];
void init() {
  for (int i = 0; i < n; i++) a[i] = i + 1;
  for (int i = 0; i < n; i++) swap(a[i], a[getNextX() % (i + 1)]);
  for (int i = 0; i < n; i++) b[i] = i < d;
  for (int i = 0; i < n; i++) swap(b[i], b[getNextX() % (i + 1)]);
}
int q[maxn], id[maxn];
int main() {
  scanf("%d%d%I64d", &n, &d, &x);
  init();
  int cnt = 0;
  for (int i = 0; i < n; i++)
    if (b[i]) q[cnt++] = i;
  for (int i = 0; i < n; i++) id[a[i]] = i;
  int s = 300;
  for (int i = 0; i < n; i++) {
    int j;
    for (j = n; j >= n - s; j--) {
      if (j && i >= id[j] && b[i - id[j]]) {
        printf("%d\n", j);
        break;
      }
    }
    if (j < n - s) {
      int mx = 0;
      for (j = 0; j < cnt && q[j] <= i; j++)
        if (a[i - q[j]] > mx) mx = a[i - q[j]];
      printf("%d\n", mx);
    }
  }
  return 0;
}
