#include
using namespace std;
// ëìì ê°ì, ëë¡ì ê°ì, 거리 ì ë³´, ì¶ë° ëì ë²í¸
int n, m, k, x;
vector graph[300001];
// 모ë ëìì ëí ìµë¨ 거리 ì´ê¸°í
vector d(300001, -1);
int main(void) {
cin >> n >> m >> k >> x;
// 모ë ëë¡ ì ë³´ ì
ë ¥ ë°ê¸°
for (int i = 0; i < m; i++) {
int a, b;
cin >> a >> b;
graph[a].push_back(b);
}
// ì¶ë° ëìê¹ì§ì 거리ë 0ì¼ë¡ ì¤ì
d[x] = 0;
// ëë¹ ì°ì íì(BFS) ìí
queue q;
q.push(x);
while (!q.empty()) {
int now = q.front();
q.pop();
// íì¬ ëììì ì´ëí ì ìë 모ë ëì를 íì¸
for (int i = 0; i < graph[now].size(); i++) {
int nextNode = graph[now][i];
// ìì§ ë°©ë¬¸íì§ ìì ëìë¼ë©´
if (d[nextNode] == -1) {
// ìµë¨ 거리 ê°±ì
d[nextNode] = d[now] + 1;
q.push(nextNode);
}
}
}
// ìµë¨ ê±°ë¦¬ê° Kì¸ ëª¨ë ëìì ë²í¸ë¥¼ ì¤ë¦ì°¨ìì¼ë¡ ì¶ë ¥
bool check = false;
for (int i = 1; i <= n; i++) {
if (d[i] == k) {
cout << i << '\n';
check = true;
}
}
// ë§ì½ ìµë¨ ê±°ë¦¬ê° Kì¸ ëìê° ìë¤ë©´, -1 ì¶ë ¥
if (!check) cout << -1 << '\n';
}