#include <iostream>
#include <cstring>
using namespace std;
struct node{
int to,next;
}edge[10005];
int K,N,M,cnt,ans,cow[105],num[1005],head[1005];
bool vis[1005];
void add(int x,int y){
edge[++cnt].to=y;
edge[cnt].next=head[x];
head[x]=cnt;
}
void dfs(int cowi){
num[cowi]++;
for(int i=head[cowi];i;i=edge[i].next){
int a=edge[i].to;
if(!vis[a]){
vis[a]=1;
dfs(edge[i].to);
}
}
}
int main(){
cin>>K>>N>>M;
for(int i=0;i<K;i++){
cin>>cow[i];
}
for(int i=0;i<M;i++){
int x,y;
cin>>x>>y;
add(x,y);
}
for(int i=0;i<K;i++){
vis[cow[i]]=1;
dfs(cow[i]);
memset(vis,0,sizeof(vis));
}
for(int i=0;i<N;i++){
if(num[i]==K){
ans++;
}
}
cout<<ans;
return 0;
}