#include<set>
#include<map>
#include<queue>
#include<vector>
#include<algorithm>
#include<bits/stdc++.h>
#define pr pair
#define f first
#define s second
#define ll long long
#define mp make_pair
#define pll pr<ll,ll>
#define pii pr<int,int>
#define piii pr<int,pii>
using namespace std;
int a[1000006];
int b[1000006];
int ap[1000006];
vector<int> qr[1000006];
vector<int> hd[1000006];
vector<int> e[1000006];
vector<int> f[1000006];
bool bd[1000006];
int nx[1000006],pf[1000006];
int gq[1000006];
int mi[1000006],ans[1000006];
bool vd[1000006];
int t;
vector<int> ls;
int dfn[1000006];
void dfs(int x)
{
if(vd[x]) return;
vd[x]=1;
for(int to:f[x]) dfs(to);
dfn[t++]=x;
}
void df(int x)
{
if(vd[x]) return;
vd[x]=1;
ls.push_back(x);
for(int to:e[x]) dfs(to);
}
int main()
{
ios_base::sync_with_stdio(0);
int n,m,k;
cin>>n>>m>>k;
for(int i=0;i<n;i++) cin>>a[i],a[i]--;
for(int i=0;i<n;i++) ap[i]=k+1;
int x;
for(int i=0;i<k;i++)
{
cin>>x;
x--;
b[i]=x;
ap[x]=min(ap[x],i);
}
int u,v;
while(m--)
{
cin>>u>>v;
u--;
v--;
e[u].push_back(v);
f[v].push_back(u);
}
for(int i=0;i<n;i++) dfs(i);
reverse(dfn,dfn+n);
for(int i=0;i<n;i++) vd[i]=0;
for(int i=0;i<n;i++)
{
int j=dfn[i];
if(vd[i]) continue;
ls.clear();
df(j);
int st=k-1;
for(int l:ls) st=min(st,ap[a[l]]);
hd[st].push_back(i);
for(int l:ls) qr[i].push_back(a[l]);
}
for(int i=0;i<=n;i++) ap[i]=k+1;
for(int i=0;i<=n;i++) nx[i]=i+1,pf[i+1]=i;
nx[n+1]=0;
pf[0]=n+1;
for(int i=k-1;i>=0;i--)
{
for(int j:hd[i])
{
for(int l:qr[l]) bd[l]=1;
int c=nx[n+1];
for(;bd[c];c=nx[c]);
gq[j]=ap[c];
for(int l:qr[l]) bd[l]=0;
}
int g=b[i];
ap[g]=i;
pf[nx[g]]=nx[g];
nx[pf[g]]=pf[g];
nx[g]=nx[n+1];
pf[nx[n+1]]=g;
nx[n+1]=g;
pf[g]=n+1;
}
for(int i=0;i<n;i++) vd[i]=0;
for(int i=0;i<n;i++) mi[i]=k+1,ans[i]=k+1;
for(int i=0;i<n;i++)
{
int j=dfn[i];
if(vd[j]) continue;
ls.clear();
df(j);
int st=k+1;
for(int l:ls) st=min(st,ap[a[l]]);
int o=gq[i];
int fd=k+1;
for(int l:ls) for(int p:e[l]) fd=min(fd,mi[p]);
int td=fd;
if(ls.size()>1)
{
if(st<fd)
{
int kz=min(o-1,fd);
if((kz-st)%2==1) td=st+1;
else td=st;
}
for(int l:ls) mi[l]=td,ans[l]=td;
}
else
{
if(st<fd-1) td=st;
mi[ls[0]]=td;
ans[ls[0]]=fd;
}
// cout<<"-----\n";
// for(int l:ls) cout<<l<<' ';
// cout<<endl;
// cout<<"F "<<i<<' '<<j<<" "<<st<<' '<<td<<' '<<fd<<' '<<o<<endl;
}
for(int i=0;i<n;i++) cout<<(ans[i]>=k?-1:ans[i])<<' ';
cout<<'\n';
return 0;
}