#include <bits/stdc++.h>
using namespace std;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0), cout.tie(0);
  cout << fixed << setprecision(15);
  int N, M, S, K;
  cin >> N >> M >> S >> K;
  vector<int> type(N);
  for (int i = 0; i < N; i++) {
    cin >> type[i];
    --type[i];
  }
  vector<vector<int>> adj(N);
  for (int i = 0; i < M; i++) {
    int u, v;
    cin >> u >> v;
    adj[u - 1].push_back(v - 1);
    adj[v - 1].push_back(u - 1);
  }
  vector<vector<int>> opt(N);
  for (int tp = 0; tp < S; tp++) {
    vector<int> dist(N, -1);
    queue<pair<int, int>> q;
    for (int i = 0; i < N; i++) {
      if (type[i] == tp) {
        q.push({i, 0});
        dist[i] = 0;
      }
    }
    while (!q.empty()) {
      int loc = q.front().first;
      int tot = q.front().second;
      q.pop();
      for (int nbr : adj[loc]) {
        if (dist[nbr] != -1) continue;
        dist[nbr] = tot + 1;
        q.push({nbr, tot + 1});
      }
    };
    ;
    for (int i = 0; i < N; i++) {
      opt[i].push_back(dist[i]);
    }
  }
  for (int i = 0; i < N; i++) {
    sort((opt[i]).begin(), (opt[i]).end());
    int ans = 0;
    for (int j = 0; j < K; j++) {
      ans += opt[i][j];
    }
    cout << ans << " ";
  }
  cout << endl;
  return 0;
}
