#include <bits/stdc++.h>
using namespace std;
const int N = 110000;
inline int Max(const int &a, const int &b) {
  if (a > b) return a;
  return b;
}
long long seed;
int a[N], b[N];
int c[N];
int n, d;
inline long long getnextX() {
  seed = (seed * 37ll + 10007) % 1000000007;
  return seed;
}
inline void init() {
  for (int i = (0); i <= (int)n - 1; i++) a[i] = i + 1;
  for (int i = (0); i <= (int)n - 1; i++) swap(a[i], a[getnextX() % (i + 1)]);
  for (int i = (0); i <= (int)n - 1; i++) {
    if (i < d)
      b[i] = 1;
    else
      b[i] = 0;
  }
  for (int i = (0); i <= (int)n - 1; i++) swap(b[i], b[getnextX() % (i + 1)]);
}
int q[N];
int main() {
  scanf("%d%d%I64d", &n, &d, &seed);
  init();
  for (int i = (0); i <= (int)n - 1; i++)
    if (b[i]) q[++q[0]] = i;
  for (int i = (0); i <= (int)n - 1; i++) c[a[i]] = i;
  for (int i = (0); i <= (int)n - 1; i++) {
    bool flag = 0;
    int limit = n - 30;
    if (limit < 0) limit = 1;
    for (int j = (n); j >= (int)limit; j--)
      if (c[j] <= i && b[i - c[j]]) {
        printf("%d\n", j);
        flag = 1;
        break;
      }
    if (!flag) {
      int ma = 0;
      for (int j = (1); j <= (int)q[0]; j++)
        if (q[j] <= i) ma = Max(ma, a[i - q[j]]);
      printf("%d\n", ma);
    }
  }
  return 0;
}
