#include<cmath>
#include<stdio.h>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<stack>
#include<vector>
#include<queue>
#include<string>
#include<map>
using namespace std;

/*************************
题意:给出一个无向图
求删去其中一个节点时,需要增加多少边才能使之相连
/************************
求解要点:
增加多少边实际上就是删去节点时,有多少连通分量
这里我们可以用dfs简单去做。
求联通分量个数方法:对每个点做dfs搜索,经过一个点就vis置1
搜完后,即为1个连通分量
接着对其他点进行同样dfs搜索
如果vis未被置为1,则为新的联通分量。
************************/

/***********************
笔记:
自己写代码前最好先想好特殊情况
*********************/
#define M 1005
vector<int> node[M];
int vis[M];

void dfs(int city){
int i,nextc;
for(i = 0;i < node[city].size(); i++){
nextc = node[city][i];
if(!vis[nextc]){
vis[nextc] = 1;
dfs(nextc);
}
}

}

int main()
{
int n,m,k;
scanf("%d%d%d",&n,&m,&k);

int s,e;
while(m--){
scanf("%d%d",&s,&e);
node[s].push_back(e);
node[e].push_back(s);
}
int c,i,city;
int sum;
while(k--){
scanf("%d",&c);
memset(vis,0,sizeof(vis));
sum = 0;
vis[c]=1;//这个城市不能走了
for(i=1;i<=n;i++){
if(!vis[i]){ //对一个点进行dfs搜索,经过的点置1
sum++; //若这个点没被置1,说明存在一个连通分量
vis[i]=1;
dfs(i);
}
}
printf("%d\n",sum-1);

}
return 0;
}