#ifdef ONPC
#define _GLIBCXX_DEBUG
#endif
#include <bits/stdc++.h>
#define pii pair<int, int>
using namespace std;
mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());
struct custom_hash
{
static uint64_t splitmix64(uint64_t x)
{
// http://x...content-available-to-author-only...i.it/splitmix64.c
x += 0x9e3779b97f4a7c15;
x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9;
x = (x ^ (x >> 27)) * 0x94d049bb133111eb;
return x ^ (x >> 31);
}
size_t operator()(uint64_t x) const
{
static const uint64_t FIXED_RANDOM = chrono::steady_clock::now().time_since_epoch().count();
return splitmix64(x + FIXED_RANDOM);
}
};
void solve()
{
int n, k, m, s;
cin >> n >> k >> m >> s;
vector<int> vis(n, 0);
s -= 1;
vis[s] = 1;
vector<set<int>> parity(2);
for (int i = 0; i < n; ++i)
{
parity[i % 2].insert(i);
}
parity[s % 2].erase(s);
for (int i = 0; i < m; ++i)
{
int x;
cin >> x;
--x;
parity[x % 2].erase(x);
}
vector<int> dist(n, -1);
dist[s] = 0;
queue<int> qu;
qu.push(s);
while (!qu.empty())
{
int curr = qu.front();
qu.pop();
vis[curr] = 1;
// ab curr say kidhar jaa sakte hain
int l__ = max(0, curr - k + 1);
int r__ = l__ + k - 1;
int mini = l__ + r__ - curr;
int r_ = min(n - 1, curr + k - 1);
int l_ = r_ - k + 1;
int maxi = r_ + l_ - curr;
// cout << mini << ' ' << maxi << ' ';
auto it = parity[mini % 2].lower_bound(mini);
unordered_map<int, int, custom_hash> mp;
// cout << "Curr: " << curr << ' ';
while (it != parity[mini % 2].end() && *it <= maxi)
{
// cout << *it << ' ';
if (vis[*it] == 0 || dist[*it] > dist[curr] + 1)
{
dist[*it] = dist[curr] + 1;
qu.push(*it);
mp[*it] = 1;
}
it++;
// because hum idhar ponch gaye hains
}
// cout << endl;
for (auto [x, y] : mp)
{
parity[x % 2].erase(x);
}
}
for (auto i : dist)
{
cout << i << ' ';
}
return;
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
int t = 1;
#ifdef ONPC
freopen("input.txt", "r", stdin);
#endif
// cin >> t;
for (int i = 0; i < t; ++i)
{
solve();
}
#ifdef ONPC
cerr << endl
<< "finished in " << clock() * 1.0 / CLOCKS_PER_SEC << " sec" << endl;
#endif
return 0;
}
I2lmZGVmIE9OUEMKI2RlZmluZSBfR0xJQkNYWF9ERUJVRwojZW5kaWYKI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgcGlpIHBhaXI8aW50LCBpbnQ+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgptdDE5OTM3IHJuZChjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCkudGltZV9zaW5jZV9lcG9jaCgpLmNvdW50KCkpOwpzdHJ1Y3QgY3VzdG9tX2hhc2gKewogICAgc3RhdGljIHVpbnQ2NF90IHNwbGl0bWl4NjQodWludDY0X3QgeCkKICAgIHsKICAgICAgICAvLyBodHRwOi8veC4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4uaS5pdC9zcGxpdG1peDY0LmMKICAgICAgICB4ICs9IDB4OWUzNzc5Yjk3ZjRhN2MxNTsKICAgICAgICB4ID0gKHggXiAoeCA+PiAzMCkpICogMHhiZjU4NDc2ZDFjZTRlNWI5OwogICAgICAgIHggPSAoeCBeICh4ID4+IDI3KSkgKiAweDk0ZDA0OWJiMTMzMTExZWI7CiAgICAgICAgcmV0dXJuIHggXiAoeCA+PiAzMSk7CiAgICB9CgogICAgc2l6ZV90IG9wZXJhdG9yKCkodWludDY0X3QgeCkgY29uc3QKICAgIHsKICAgICAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgRklYRURfUkFORE9NID0gY2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpLnRpbWVfc2luY2VfZXBvY2goKS5jb3VudCgpOwogICAgICAgIHJldHVybiBzcGxpdG1peDY0KHggKyBGSVhFRF9SQU5ET00pOwogICAgfQp9Owp2b2lkIHNvbHZlKCkKewogICAgaW50IG4sIGssIG0sIHM7CiAgICBjaW4gPj4gbiA+PiBrID4+IG0gPj4gczsKICAgIHZlY3RvcjxpbnQ+IHZpcyhuLCAwKTsKICAgIHMgLT0gMTsKICAgIHZpc1tzXSA9IDE7CiAgICB2ZWN0b3I8c2V0PGludD4+IHBhcml0eSgyKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKQogICAgewogICAgICAgIHBhcml0eVtpICUgMl0uaW5zZXJ0KGkpOwogICAgfQogICAgcGFyaXR5W3MgJSAyXS5lcmFzZShzKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbTsgKytpKQogICAgewogICAgICAgIGludCB4OwogICAgICAgIGNpbiA+PiB4OwogICAgICAgIC0teDsKICAgICAgICBwYXJpdHlbeCAlIDJdLmVyYXNlKHgpOwogICAgfQogICAgdmVjdG9yPGludD4gZGlzdChuLCAtMSk7CiAgICBkaXN0W3NdID0gMDsKICAgIHF1ZXVlPGludD4gcXU7CiAgICBxdS5wdXNoKHMpOwogICAgd2hpbGUgKCFxdS5lbXB0eSgpKQogICAgewogICAgICAgIGludCBjdXJyID0gcXUuZnJvbnQoKTsKICAgICAgICBxdS5wb3AoKTsKICAgICAgICB2aXNbY3Vycl0gPSAxOwogICAgICAgIC8vIGFiIGN1cnIgc2F5IGtpZGhhciBqYWEgc2FrdGUgaGFpbgogICAgICAgIGludCBsX18gPSBtYXgoMCwgY3VyciAtIGsgKyAxKTsKICAgICAgICBpbnQgcl9fID0gbF9fICsgayAtIDE7CiAgICAgICAgaW50IG1pbmkgPSBsX18gKyByX18gLSBjdXJyOwogICAgICAgIGludCByXyA9IG1pbihuIC0gMSwgY3VyciArIGsgLSAxKTsKICAgICAgICBpbnQgbF8gPSByXyAtIGsgKyAxOwogICAgICAgIGludCBtYXhpID0gcl8gKyBsXyAtIGN1cnI7CiAgICAgICAgLy8gIGNvdXQgPDwgbWluaSA8PCAnICcgPDwgbWF4aSA8PCAnICc7CiAgICAgICAgYXV0byBpdCA9IHBhcml0eVttaW5pICUgMl0ubG93ZXJfYm91bmQobWluaSk7CiAgICAgICAgdW5vcmRlcmVkX21hcDxpbnQsIGludCwgY3VzdG9tX2hhc2g+IG1wOwogICAgICAgIC8vIGNvdXQgPDwgIkN1cnI6ICIgPDwgY3VyciA8PCAnICc7CiAgICAgICAgd2hpbGUgKGl0ICE9IHBhcml0eVttaW5pICUgMl0uZW5kKCkgJiYgKml0IDw9IG1heGkpCiAgICAgICAgewogICAgICAgICAgICAvLyBjb3V0IDw8ICppdCA8PCAnICc7CiAgICAgICAgICAgIGlmICh2aXNbKml0XSA9PSAwIHx8IGRpc3RbKml0XSA+IGRpc3RbY3Vycl0gKyAxKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBkaXN0WyppdF0gPSBkaXN0W2N1cnJdICsgMTsKICAgICAgICAgICAgICAgIHF1LnB1c2goKml0KTsKICAgICAgICAgICAgICAgIG1wWyppdF0gPSAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGl0Kys7CiAgICAgICAgICAgIC8vIGJlY2F1c2UgaHVtIGlkaGFyIHBvbmNoIGdheWUgaGFpbnMKICAgICAgICB9CiAgICAgICAgLy8gY291dCA8PCBlbmRsOwogICAgICAgIGZvciAoYXV0byBbeCwgeV0gOiBtcCkKICAgICAgICB7CiAgICAgICAgICAgIHBhcml0eVt4ICUgMl0uZXJhc2UoeCk7CiAgICAgICAgfQogICAgfQogICAgZm9yIChhdXRvIGkgOiBkaXN0KQogICAgewogICAgICAgIGNvdXQgPDwgaSA8PCAnICc7CiAgICB9CiAgICByZXR1cm47Cn0KCnNpZ25lZCBtYWluKCkKewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOwogICAgaW50IHQgPSAxOwojaWZkZWYgT05QQwogICAgZnJlb3BlbigiaW5wdXQudHh0IiwgInIiLCBzdGRpbik7CiNlbmRpZgogICAgLy8gY2luID4+IHQ7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHQ7ICsraSkKICAgIHsKICAgICAgICBzb2x2ZSgpOwogICAgfQojaWZkZWYgT05QQwogICAgY2VyciA8PCBlbmRsCiAgICAgICAgIDw8ICJmaW5pc2hlZCBpbiAiIDw8IGNsb2NrKCkgKiAxLjAgLyBDTE9DS1NfUEVSX1NFQyA8PCAiIHNlYyIgPDwgZW5kbDsKI2VuZGlmCiAgICByZXR1cm4gMDsKfQ==