#pragma GCC optimize("O3") #include using namespace std; const int MAXN = 100000; const int MAXK = 20; int arr[MAXN]; vector edges[MAXN]; //deque> dq; deque dp; deque df; deque djmp; deque dd; int dist[MAXN][MAXK + 1][2]; bool bio[MAXN][MAXK + 1][2]; void go(int p, int f, bool jmp, int d, bool add) { // cerr<<' '<

>n>>m>>s>>k; --s; for (int i = 1; i < n; ++i) { cin>>arr[i]; --arr[i]; } while (m--) { int a, b; cin>>a>>b; --a, --b; edges[a].push_back(b); edges[b].push_back(a); } go(s, 1, false, 0, false); while (!dp.empty()) { int p, f, d; bool jmp; // tie(p, f, jmp, d) = dq.front(); p = dp.front(); f = df.front(); jmp = djmp.front(); d = dd.front(); // dq.pop_front(); dp.pop_front(); df.pop_front(); djmp.pop_front(); dd.pop_front(); if (bio[p][f][jmp]) continue; dist[p][f][jmp] = d; bio[p][f][jmp] = true; // cerr<

>q; while (q--) { int x; cin>>x; --x; int sol = -1; for (int i = 0; i <= k; ++i) for (int j = 0; j < 2; ++j) if (dist[x][i][j] != -1 && (sol == -1 || dist[x][i][j] < sol)) sol = dist[x][i][j]; cout<