#include <bits/stdc++.h>
using namespace std;
const int N = 150000 + 10, M = 390, sht = 667;
int rd() {
  int x = 0, w = 1;
  char ch = 0;
  while (ch < '0' || ch > '9') {
    if (ch == '-') w = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + (ch ^ 48);
    ch = getchar();
  }
  return x * w;
}
int n, m, p, a[N], tg[M], bl[N], ps[M][2], sq[N], st[N], tp, vs[N], ti, cn[N],
    c2[N], an[N], ta;
int zz[N], rb[N], tq;
void dn(int x) {
  if (tg[x] < 0) return;
  for (int i = ps[x][0]; i <= ps[x][1]; ++i) a[i] = tg[x];
  tg[x] = -1;
}
int va(int i) { return tg[bl[i]] >= 0 ? tg[bl[i]] : a[i]; }
void srt() {
  int m = 0;
  for (int i = 1; i <= tq; ++i) ++c2[cn[zz[i]]], m = max(m, cn[zz[i]]);
  for (int i = 1; i <= m; ++i) c2[i] += c2[i - 1];
  memcpy(rb, zz, sizeof(int) * (tq + 1));
  for (int i = 1; i <= tq; ++i) {
    int xx = cn[rb[i]] - 1;
    zz[++c2[xx]] = rb[i];
  }
  reverse(zz + 1, zz + tq + 1);
}
int main() {
  mt19937 rnd(233);
  n = rd(), m = rd(), p = rd();
  int pp = 100 / p;
  for (int i = 1; i <= n; ++i) sq[i] = i - 1;
  for (int i = 1; i <= n; ++i) {
    a[i] = rd(), bl[i] = i / M + 1;
    if (!ps[bl[i]][0]) ps[bl[i]][0] = i;
    ps[bl[i]][1] = i;
  }
  memset(tg, -1, sizeof(tg));
  while (m--) {
    int op = rd(), l = rd(), r = rd();
    if (op == 1) {
      int z = rd(), x = bl[l], y = bl[r];
      if (x == y) {
        dn(x);
        for (int i = l; i <= r; ++i) a[i] = z;
      } else {
        dn(x), dn(y);
        for (int i = l; i <= ps[x][1]; ++i) a[i] = z;
        for (int i = ps[y][0]; i <= r; ++i) a[i] = z;
        for (int i = x + 1; i <= y - 1; ++i) tg[i] = z;
      }
    } else {
      ta = tp = 0, ++ti;
      if (r - l + 1 <= sht) {
        int lm = ((r - l + 1) * p + 99) / 100;
        for (int i = l; i <= r; ++i) {
          int x = va(i);
          if (vs[x] < ti) vs[x] = ti, cn[x] = 0;
          if ((++cn[x]) == lm) an[++ta] = x;
        }
      } else {
        tq = 0, c2[0] = 0;
        int nn = r - l + 1;
        for (int i = 1; i <= sht; ++i) {
          c2[i] = 0;
          int k = abs((int)rnd()) % nn + 1, j = sq[k] + l;
          st[++tp] = k;
          int x = va(j);
          if (vs[x] < ti) zz[++tq] = x, vs[x] = ti, cn[x] = 0;
          ++cn[x];
          swap(sq[k], sq[nn]), --nn;
        }
        while (tp) {
          ++nn;
          swap(sq[nn], sq[st[tp--]]);
        }
        srt();
        ta = min(tq, pp);
        for (int i = 1; i <= ta; ++i) an[i] = zz[i];
        for (int i = ta + 1; i <= pp; ++i)
          an[++ta] = va(abs((int)rnd()) % (r - l + 1) + l);
      }
      printf("%d ", ta);
      for (int i = 1; i <= ta; ++i) printf("%d ", an[i]);
      puts("");
    }
  }
  return 0;
}
