/*
需要添加最少的线使非连通块成为一个连通块
线的个数最少为非连通块的个数减1
*/
#include<iostream>
#include<vector>
#include<cstring>
using namespace std;
vector<vector<int> > v;
bool vis[1010];
void dfs(int x){
vis[x]=true;
for(int i=0;i<v[x].size();i++)
if(vis[v[x][i]]==false)
dfs(v[x][i]);
}
int main(){
int N,M,K,a,b;
scanf("%d%d%d",&N,&M,&K);
v.resize(N+1);//哭死,这里是N+1!!!
for(int i=0;i<M;i++){
scanf("%d%d",&a,&b);
v[a].push_back(b);
v[b].push_back(a);
}
for(int i=0;i<K;i++){
int block=0,deleted;
scanf("%d",&deleted);
memset(vis,false,sizeof(vis));
vis[deleted]=true;
for(int j=1;j<=N;j++){
if(vis[j]==false){
dfs(j);
block++;
}
}
printf("%d\n",block-1);
}
return 0;
}