#include<bits/stdc++.h>
#define N 500001
using namespace std;
int n,m,a[N],ans;
int S,P;
int cnt,fir[N];
int dfn[N],low[N];
int num,stac[N],top;
int col,color[N];
int key[N],u[N],v[N];
bool vis[N],l[N],lose[N];
struct ss{
int po,nx;
}e[N];
void add(int x,int y){
e[++cnt].nx = fir[x];
e[cnt].po = y;
fir[x] = cnt;
}
void tarjan(int x){
dfn[x] = ++num;
low[x] = num;
vis[x] = 1;
stac[++top] = x;
for(int i = fir[x]; i ; i = e[i].nx){
int p = e[i].po;
if(!dfn[p]){
tarjan(p);
low[x] = min(low[x],low[p]);
}
else if(vis[p]) low[x] = min(low[x],dfn[p]);
}
if(dfn[x] == low[x]){
vis[x] = false;
color[x] = ++col;
if(l[x]) lose[col] = 1;
key[col] += a[x];
while(stac[top] != x){
int now = stac[top];
color[now] = col;
if(l[now]) lose[col] = 1;
key[col] += a[now];
vis[now] = false;
top--;
}
top--;
}
}
int dfs(int x,int now){
if(lose[x]) ans = max(ans,now);
for(int i = fir[x]; i ; i =e[i].nx){
int p = e[i].po;
dfs(p,now + key[p]);
}
}
int main(){
int i,j;
scanf("%d%d",&n,&m);
for(i = 1; i <= m; i++){
scanf("%d%d",&u[i],&v[i]);
add(u[i],v[i]);
}
for(i = 1; i <= n; i++) scanf("%d",&a[i]);
scanf("%d%d",&S,&P);
for(i = 1; i <= P; i++){
int x;
scanf("%d",&x);
l[x] = 1;
}
for(i = 1; i <= n; i++)
if(!dfn[i]) tarjan(i);
cnt = 0;
for(i = 1; i <= n; i++) fir[i] = 0;
for(i = 1; i <= m; i++){
int x = color[u[i]],y = color[v[i]];
if(x == y) continue;
add(x,y);
}
dfs(color[S],key[color[S]]);
printf("%d",ans);
return 0;
}