#include <iostream>
#include <map>
#include <vector>
#include <queue>
using namespace std;
int main() {
int n, m, virus_node, k;
cin >> n >> m;
vector<int> v(n + 1, 0);
vector<vector<int>> g(n + 2);
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);
}
cin>>virus_node >> k;
vector<int> virus(virus_node + 1);
for (int i = 1; i <= virus_node; i++) {
cin >> virus[i];
g[n + 1].push_back(virus[i]);
g[virus[i]].push_back(n + 1);
}
vector<int> lvl(n + 2, 1e8);
vector<int> used(n + 2, 0);
queue<int> q;
q.push(n + 1);
lvl[n + 1] = 0;
used[n + 1] = 1;
while (!q.empty()) {
int vertex = q.front();
q.pop();
for (auto u : g[vertex]) {
if (used[u] == 0 && lvl[vertex] < k) { // If not visited and within k distance
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) {
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" << " "; // If the node is unreachable
} else {
cout << lvl[i] << " "; // Otherwise, print the distance
}
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8cXVldWU+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIHsKICAgIGludCBuLCBtLCB2aXJ1c19ub2RlLCBrOwogICAgY2luID4+IG4gPj4gbTsKICAgIAogICAgdmVjdG9yPGludD4gdihuICsgMSwgMCk7CiAgICB2ZWN0b3I8dmVjdG9yPGludD4+IGcobiArIDIpOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CiAgICAgICAgY2luID4+IHZbaV07CiAgICB9CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBtOyBpKyspIHsKICAgICAgICBpbnQgdSwgdjsKICAgICAgICBjaW4gPj4gdSA+PiB2OwogICAgICAgIGdbdV0ucHVzaF9iYWNrKHYpOwogICAgICAgIGdbdl0ucHVzaF9iYWNrKHUpOwogICAgfQogICAgY2luPj52aXJ1c19ub2RlID4+IGs7CiAgICB2ZWN0b3I8aW50PiB2aXJ1cyh2aXJ1c19ub2RlICsgMSk7IAogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gdmlydXNfbm9kZTsgaSsrKSB7CiAgICAgICAgY2luID4+IHZpcnVzW2ldOwogICAgICAgIGdbbiArIDFdLnB1c2hfYmFjayh2aXJ1c1tpXSk7IAogICAgICAgIGdbdmlydXNbaV1dLnB1c2hfYmFjayhuICsgMSk7CiAgICB9CiAgICAKICAgCiAgICB2ZWN0b3I8aW50PiBsdmwobiArIDIsIDFlOCk7ICAKICAgIHZlY3RvcjxpbnQ+IHVzZWQobiArIDIsIDApOyAKICAgIHF1ZXVlPGludD4gcTsKICAgIAogICAgcS5wdXNoKG4gKyAxKTsKICAgIGx2bFtuICsgMV0gPSAwOwogICAgdXNlZFtuICsgMV0gPSAxOwogICAgCiAgICB3aGlsZSAoIXEuZW1wdHkoKSkgewogICAgICAgIGludCB2ZXJ0ZXggPSBxLmZyb250KCk7CiAgICAgICAgcS5wb3AoKTsKICAgICAgICAKICAgICAgICBmb3IgKGF1dG8gdSA6IGdbdmVydGV4XSkgewogICAgICAgICAgICBpZiAodXNlZFt1XSA9PSAwICYmIGx2bFt2ZXJ0ZXhdIDwgaykgeyAgLy8gSWYgbm90IHZpc2l0ZWQgYW5kIHdpdGhpbiBrIGRpc3RhbmNlCiAgICAgICAgICAgICAgICBxLnB1c2godSk7CiAgICAgICAgICAgICAgICB1c2VkW3VdID0gMTsKICAgICAgICAgICAgICAgIGx2bFt1XSA9IG1pbihsdmxbdV0sIGx2bFt2ZXJ0ZXhdICsgMSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICAKICAgIGlmICh2WzFdID09IDEpIHsKICAgICAgICBxLnB1c2goMSk7CiAgICAgICAgbHZsWzFdID0gMDsKICAgICAgICB1c2VkWzFdID0gMTsKICAgIH0KCiAgICB3aGlsZSAoIXEuZW1wdHkoKSkgewogICAgICAgIGludCB2ZXJ0ZXggPSBxLmZyb250KCk7CiAgICAgICAgcS5wb3AoKTsKICAgICAgICAKICAgICAgICBmb3IgKGF1dG8gdSA6IGdbdmVydGV4XSkgewogICAgICAgICAgICBpZiAodXNlZFt1XSA9PSAwICYmIHZbdV0gPT0gMSkgewogICAgICAgICAgICAgICAgcS5wdXNoKHUpOwogICAgICAgICAgICAgICAgdXNlZFt1XSA9IDE7CiAgICAgICAgICAgICAgICBsdmxbdV0gPSBtaW4obHZsW3VdLCBsdmxbdmVydGV4XSArIDEpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewogICAgICAgIGlmIChsdmxbaV0gPj0gMWU4KSB7CiAgICAgICAgICAgIGNvdXQgPDwgIi0xIiA8PCAiICI7ICAvLyBJZiB0aGUgbm9kZSBpcyB1bnJlYWNoYWJsZQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvdXQgPDwgbHZsW2ldIDw8ICIgIjsgIC8vIE90aGVyd2lzZSwgcHJpbnQgdGhlIGRpc3RhbmNlCiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAwOwp9Cg==