#include <bits/stdc++.h>
using namespace std;
long long int sett(long long int N, int pos) { return N = N | (1 << pos); }
int reset(int N, int pos) { return N = N & ~(1 << pos); }
bool check(int N, int pos) { return (bool)(N & (1 << pos)); }
void update(long long &x, long long val) {
  x = x + val;
  if (x > 1000000007) x -= 1000000007;
}
void fast() {
  ios_base::sync_with_stdio(0);
  cin.tie(NULL), cout.tie(NULL);
}
long long int poww(long long int a, long long int b) {
  long long int ans = 1;
  while (b--) {
    ans *= a;
  }
  return ans;
}
int moves[4][2] = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}};
char a[300][300];
long long int num[300][300];
long long int ans[300][300];
int n, m;
long long int p, q;
int vis[250][250];
int valid(int i, int j) {
  if (i < 0 || i >= n || j < 0 || j >= m) return 0;
  if (a[i][j] == '*') return 0;
  return 1;
}
void dfs(int i, int j, long long int val, int dfs_cnt) {
  cout << "now in    " << i << " " << j << endl;
  vis[i][j] = dfs_cnt;
  ans[i][j] += val;
  long long int next_level = val / 2;
  if (!next_level) return;
  for (int k = 0; k < 4; k++) {
    int next_i = i + moves[k][0];
    int next_j = j + moves[k][1];
    if (valid(next_i, next_j) && vis[next_i][next_j] != dfs_cnt) {
      dfs(next_i, next_j, next_level, dfs_cnt);
    }
  }
}
void bfs(int i, int j, long long int val, int bfs_cnt) {
  queue<pair<pair<int, int>, long long int> > q;
  q.push(make_pair(make_pair(i, j), val));
  vis[i][j] = bfs_cnt;
  while (!q.empty()) {
    pair<pair<int, int>, long long int> frnt;
    frnt = q.front();
    q.pop();
    int ii = frnt.first.first;
    int jj = frnt.first.second;
    long long int val = frnt.second;
    ans[ii][jj] += val;
    long long int next_level = val / 2;
    if (next_level == 0) continue;
    for (int k = 0; k < 4; k++) {
      int next_i = ii + moves[k][0];
      int next_j = jj + moves[k][1];
      if (valid(next_i, next_j) && vis[next_i][next_j] != bfs_cnt) {
        vis[next_i][next_j] = bfs_cnt;
        pair<pair<int, int>, long long int> temp;
        temp = make_pair(make_pair(next_i, next_j), next_level);
        q.push(temp);
      }
    }
  }
}
bool cmp(pair<pair<int, int>, int> a, pair<pair<int, int>, int> b) {
  if (a.first.first > b.first.first)
    return 1;
  else if (a.first.first == b.first.first) {
    if (a.first.second < b.first.second) return 1;
  }
  return 0;
}
int main() {
  int n, k, m, a;
  scanf("%d%d", &n, &k);
  scanf("%d%d", &m, &a);
  int vote_time[200][2];
  memset(vote_time, 0, sizeof(vote_time));
  int cnt = n;
  for (int i = 1; i <= a; i++) {
    int p;
    scanf("%d", &p);
    vote_time[p][0]++;
    vote_time[p][1] = i;
    if (vote_time[p][0] == 1) cnt--;
  }
  int ans[n + 10];
  memset(ans, 0, sizeof(ans));
  if (m == 0) {
    for (int i = 1; i <= n; i++) printf("3 ");
    return 0;
  }
  int flag0 = 0;
  for (int i = 1; i <= n; i++) {
    if (vote_time[i][0] == 0 && flag0 == 3) {
      ans[i] = 3;
      continue;
    }
    int candidates_vote = vote_time[i][0] + (m - a);
    int candidates_time = vote_time[i][1];
    if (m - a > 0) candidates_time = m;
    if (candidates_vote == 0) {
      ans[i] = 3;
      flag0 = 3;
    }
    vector<pair<pair<int, int>, int> > bal;
    pair<pair<int, int>, int> temp =
        make_pair(make_pair(candidates_vote, candidates_time), i);
    bal.push_back(temp);
    for (int j = 1; j <= n; j++) {
      if (i != j) {
        temp = make_pair(make_pair(vote_time[j][0], vote_time[j][1]), j);
        bal.push_back(temp);
      }
    }
    sort(bal.begin(), bal.end(), cmp);
    int pos = m;
    for (int j = 0; j < n; j++) {
      if (bal[j].second == i) {
        pos = j + 1;
        break;
      }
    }
    if (pos > k) {
      ans[i] = 3;
      if (vote_time[i][0] == 0) {
        flag0 = 3;
      }
    }
  }
  for (int i = 1; i <= n; i++) {
    if (ans[i] > 0) continue;
    if (vote_time[i][0] == 0) {
      ans[i] == 2;
      continue;
    }
    vector<pair<pair<int, int>, int> > bal;
    pair<pair<int, int>, int> temp;
    for (int j = 1; j <= n; j++) {
      temp = make_pair(make_pair(vote_time[j][0], vote_time[j][1]), j);
      bal.push_back(temp);
    }
    sort(bal.begin(), bal.end(), cmp);
    int pos = m;
    for (int j = 0; j < n; j++) {
      if (bal[j].second == i) {
        pos = j + 1;
        break;
      }
    }
    int sorte_hobe = k - pos + 1;
    if (k == n) {
      ans[i] = 1;
      continue;
    }
    int tot_need = 0;
    for (int j = pos; j < pos + sorte_hobe; j++) {
      int gap = bal[pos - 1].first.first - bal[j].first.first + 1;
      tot_need += gap;
    }
    int baki_ase = m - a;
    if (tot_need > baki_ase) {
      ans[i] = 1;
    }
    if (tot_need == 0 && baki_ase == 0) {
      ans[i] = 1;
    }
  }
  for (int i = 1; i <= n; i++) {
    if (ans[i] == 0)
      printf("2 ");
    else
      printf("%d ", ans[i]);
  }
  return 0;
}
