Code:
#include<bits/stdc++.h>
using namespace std;
#define MAXN 1010
int k,n,m;
vector<int> G[MAXN];
vector<int> now;
vector<int> Y[MAXN];
bool vis[MAXN][MAXN];
long long ans=0;
int cnt[MAXN];
void bfs(int u){
queue<int> q;
q.push(u);
while(!q.empty()){
int t=q.front();
q.pop();
for(int i=0;i<G[t].size();++i){
if(!vis[u][G[t][i]]){
Y[u].push_back(G[t][i]);
q.push(G[t][i]);vis[u][G[t][i]]=true;
}
}
}
}
int main(){
scanf("%d%d%d",&k,&n,&m);
for(int i=1;i<=k;i++){
int x;scanf("%d",&x);
now.push_back(x);
}
for(int i=1;i<=m;i++){
int u,v;
scanf("%d%d",&u,&v);
G[u].push_back(v);
}
for(int i=0;i<now.size();i++){
Y[now[i]].push_back(now[i]);
bfs(now[i]);
sort(Y[now[i]].begin(),Y[now[i]].end());
for(int j=0;j<Y[now[i]].size();j++){
cnt[Y[now[i]][j]]++;
}
memset(vis,0,sizeof(vis));
}
for(int i=1;i<=n;i++){
if(cnt[i]==k){
ans++;
}
}printf("%lld",ans);
return 0;
}