#include <iostream>
#include <map>
#include <vector>
#include <queue>
using namespace std;
int main() {
int n, m, virus_index,k;
cin >> n >>m>>virus_index>>k;
vector<int> v(n + 1, 0);
vector<vector<int>> g(n + 1);
for (int i = 1; i <= n; i++) {
cin >> v[i];
}
for (int i = 1; i <= m; i++) {
int u, v;
cin >> u >> v;
g[u].push_back(v);
g[v].push_back(u);
}
vector<int> lvl(n + 1, 1e8);
vector<int> used(n + 1, 0);
queue<int> q;
q.push(virus_index);
lvl[virus_index] = 0;
used[virus_index] = 1;
while (!q.empty()) {
int vertex = q.front();
q.pop();
for (auto u : g[vertex]) {
if (used[u] == 0 && lvl[u] <= k) { // Check if the node has value 1 and not visited
q.push(u);
used[u] = 1;
lvl[u] = min(lvl[u], lvl[vertex] + 1);
}
}
}
if (v[1] == 1) {
q.push(1);
lvl[1] = 0;
used[1] = 1;
}
while (!q.empty()) {
int vertex = q.front();
q.pop();
for (auto u : g[vertex]) {
if (used[u] == 0 && v[u] == 1) { // Check if the node has value 1 and not visited
q.push(u);
used[u] = 1;
lvl[u] = min(lvl[u], lvl[vertex] + 1);
}
}
}
for (int i = 1; i <= n; i++) {
if (lvl[i] >= 1e8) {
cout << "-1" << " ";
} else {
cout << lvl[i] << " ";
}
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8cXVldWU+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIHsKICAgIGludCBuLCBtLCB2aXJ1c19pbmRleCxrOwogICAgY2luID4+IG4gPj5tPj52aXJ1c19pbmRleD4+azsKICAgIHZlY3RvcjxpbnQ+IHYobiArIDEsIDApOwogICAgdmVjdG9yPHZlY3RvcjxpbnQ+PiBnKG4gKyAxKTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewogICAgICAgIGNpbiA+PiB2W2ldOwogICAgfQogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbTsgaSsrKSB7IAogICAgICAgIGludCB1LCB2OwogICAgICAgIGNpbiA+PiB1ID4+IHY7CiAgICAgICAgZ1t1XS5wdXNoX2JhY2sodik7CiAgICAgICAgZ1t2XS5wdXNoX2JhY2sodSk7CiAgICB9CgogICAgdmVjdG9yPGludD4gbHZsKG4gKyAxLCAxZTgpOwogICAgdmVjdG9yPGludD4gdXNlZChuICsgMSwgMCk7IAogICAgcXVldWU8aW50PiBxOwogICAgcS5wdXNoKHZpcnVzX2luZGV4KTsKICAgIGx2bFt2aXJ1c19pbmRleF0gPSAwOwogICAgdXNlZFt2aXJ1c19pbmRleF0gPSAxOwogICAgd2hpbGUgKCFxLmVtcHR5KCkpIHsKICAgICAgICBpbnQgdmVydGV4ID0gcS5mcm9udCgpOwogICAgICAgIHEucG9wKCk7CiAgICAgICAgZm9yIChhdXRvIHUgOiBnW3ZlcnRleF0pIHsKICAgICAgICAgICAgaWYgKHVzZWRbdV0gPT0gMCAmJiBsdmxbdV0gPD0gaykgeyAgLy8gQ2hlY2sgaWYgdGhlIG5vZGUgaGFzIHZhbHVlIDEgYW5kIG5vdCB2aXNpdGVkCiAgICAgICAgICAgICAgICBxLnB1c2godSk7CiAgICAgICAgICAgICAgICB1c2VkW3VdID0gMTsKICAgICAgICAgICAgICAgIGx2bFt1XSA9IG1pbihsdmxbdV0sIGx2bFt2ZXJ0ZXhdICsgMSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgoKCiAgICBpZiAodlsxXSA9PSAxKSB7CiAgICAgICAgcS5wdXNoKDEpOwogICAgICAgIGx2bFsxXSA9IDA7CiAgICAgICAgdXNlZFsxXSA9IDE7CiAgICB9CgogICAgd2hpbGUgKCFxLmVtcHR5KCkpIHsKICAgICAgICBpbnQgdmVydGV4ID0gcS5mcm9udCgpOwogICAgICAgIHEucG9wKCk7CiAgICAgICAgZm9yIChhdXRvIHUgOiBnW3ZlcnRleF0pIHsKICAgICAgICAgICAgaWYgKHVzZWRbdV0gPT0gMCAmJiB2W3VdID09IDEpIHsgIC8vIENoZWNrIGlmIHRoZSBub2RlIGhhcyB2YWx1ZSAxIGFuZCBub3QgdmlzaXRlZAogICAgICAgICAgICAgICAgcS5wdXNoKHUpOwogICAgICAgICAgICAgICAgdXNlZFt1XSA9IDE7CiAgICAgICAgICAgICAgICBsdmxbdV0gPSBtaW4obHZsW3VdLCBsdmxbdmVydGV4XSArIDEpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewogICAgICAgIGlmIChsdmxbaV0gPj0gMWU4KSB7CiAgICAgICAgICAgIGNvdXQgPDwgIi0xIiA8PCAiICI7IAogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvdXQgPDwgbHZsW2ldIDw8ICIgIjsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDA7Cn0K