#include <iostream>
#include <cstdio>
#include <memory.h>
using namespace std;
int key[1001];
int map[1001][1001];
int map2[1001][1001];
int vis[1001];
int n,m,k,flag;
void dfs(int s) {
int cur = s;
vis[cur] = 1;
for (int i = 1; i <= n; i++) {
if (map[cur][i] && !vis[i]) {
dfs(i);
}
}
}
int main() {
memset(key,0,sizeof(key));
memset(map,0,sizeof(map));
memset(map2,0,sizeof(map2));
memset(vis,0,sizeof(vis));
cin >> n >> m >> k;
for (int i = 0; i < m; i++) {
int a,b;
cin >> a >> b;
map[a][b] = 1;
map[b][a] = 1;
}
for (int i = 1; i <= k; i++) cin >> key[i];
for (int i = 1; i <= n; i++) { //保存地图
for (int j = 1; j <= n; j++)
map2[i][j] = map[i][j];
}
for (int t = 1; t <= k; t++) {
flag = key[t];
for (int i = 1; i <= n; i++) {//去掉已被占领城市的来路与去路
for (int j = 1; j <= n; j++) {
if (i == flag || j == flag)
map[i][j] = 0;
}
}
int cnt = 0;
for (int i = 1; i <= n; i++) { //此循环中每调用一次DFS 遍历图的一个连通分量
//每个顶点都作为起点 进行试探
if (!vis[i]) {
dfs(i);
cnt++; //统计连通分量总数
}
}
printf("%d\n",cnt-2);//要修的公路为除去key[i]外连通分量总数减1 则为 cnt - 1 - 1
for (int i = 1; i <= n; i++) { //恢复地图
for (int j = 1; j <= n; j++)
map[i][j] = map2[i][j];
}
memset(vis,0,sizeof(vis));
}
return 0;
}