#include<bits/stdc++.h>
#include <atcoder/all>
#ifdef LOCAL
#include <debug_print.hpp>
#define debug(...) debug_print::multi_print(#__VA_ARGS__, __VA_ARGS__)
#else
#define debug(...) (static_cast<void>(0))
#endif
using namespace atcoder;
using mint=modint998244353;
using namespace std;
using ll=long long;
using ul=unsigned long long;
int dx[9] = {-1, 1, 0, 0, -1, -1, 1, 1, 0};
int dy[9] = {0, 0, -1, 1, -1, 1, -1, 1, 0};
using Graph=vector<vector<int>>;
ll op(ll a,ll b){return min(a,b);}
ll e(){return 2e9;}
int main(){
	int N,M,S,G;
	cin>>N>>M>>S>>G;
	S--,G--;
	Graph g(N);
	for(int i=0;i<M;i++){
		int F,T;
		cin>>F>>T;
		F--,T--;
		g[F].push_back(T),g[T].push_back(F);
	}
	int U;
	cin>>U;
	set<int>st;
	for(int i=0;i<U;i++){
		int a;
		cin>>a;
		a--;
		st.insert(a);
	}
	vector<bool>vi(N);
	auto dfs=[&](auto dfs,int i)->void {
		vi[i]=true;
		for(auto ni:g[i]){
			if(vi[ni]||st.count(ni))continue;
			dfs(dfs,ni);
		}
	};
	dfs(dfs,S);
	cout<<(vi[G]?"Yes":"No")<<endl;
}