#include using namespace std; #ifdef LOCAL #include "settings/debug.cpp" #else #define Debug(...) void(0) #endif #define rep(i, n) for (int i = 0; i < (n); ++i) using ll = long long; using ull = unsigned long long; int main() { cin.tie(nullptr)->sync_with_stdio(false); int n, m, s, g; cin >> n >> m >> s >> g; --s, --g; vector Graph(n, vector()); rep(_, m) { int u, v; cin >> u >> v; --u, --v; Graph[u].push_back(v); Graph[v].push_back(u); } set forbidden; { int u; cin >> u; rep(_, u) { int v; cin >> v; --v; forbidden.insert(v); } } constexpr int INF = 1e9; vector dist(n, INF); dist[s] = 0; queue q; q.push(s); while (!q.empty()) { int u = q.front(); q.pop(); for (int v : Graph[u]) { if (forbidden.contains(v)) continue; if (dist[v] > dist[u] + 1) { dist[v] = dist[u] + 1; q.push(v); } } } cout << (dist[g] == INF ? "No" : "Yes") << '\n'; return 0; }