#include <bits/stdc++.h>
using namespace std;
long long a[1005];
struct node {
  long long id, sum, ti;
} num[1005];
bool cmp(struct node a, struct node b) {
  if (a.sum != b.sum)
    return a.sum > b.sum;
  else
    return a.ti < b.ti;
}
int main() {
  long long n, m, i, j, k, hav;
  scanf("%lld %lld %lld %lld", &n, &k, &m, &hav);
  if (k > n) k = n;
  for (i = 1; i <= n; i++) {
    num[i].id = i;
    num[i].sum = 0;
    num[i].ti = 0;
  }
  for (i = 1; i <= hav; i++) {
    scanf("%lld", &j);
    num[j].sum++;
    num[j].ti = i;
  }
  sort(num + 1, num + n + 1, cmp);
  for (i = 1; i <= n; i++) {
    long long pre = i - 1, need = 0;
    if (num[i].sum == 0) {
      if (num[i].sum + m - hav == 0 || num[i].sum + m - hav <= num[k].sum) {
        a[num[i].id] = 3;
      } else {
        a[num[i].id] = 2;
      }
      continue;
    }
    if (pre < k) {
      if (k - pre > n - i) {
        a[num[i].id] = 1;
        continue;
      }
      for (j = 1; j <= k - pre; j++) {
        long long qwe = i + j;
        need += num[i].sum + 1 - num[qwe].sum;
      }
      if (need > m - hav) {
        a[num[i].id] = 1;
      } else {
        need = 0;
        for (j = i + 1; j <= n; j++) {
          need += num[i].sum - num[j].sum;
        }
        if (need >= m - hav) {
          a[num[i].id] = 2;
        } else {
          long long asd = m - hav - need;
          a[num[i].id] = 2;
        }
      }
    } else {
      if (num[i].sum + m - hav <= num[k].sum) {
        a[num[i].id] = 3;
      } else
        a[num[i].id] = 2;
    }
  }
  for (i = 1; i <= n; i++) {
    if (i != 1) printf(" ");
    printf("%lld", a[i]);
  }
  printf("\n");
  return 0;
}
