#include <iostream>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 1001;
const int Inf = 1000000000;
int G[maxn][maxn];
bool vis[maxn] = {false};
int n, m, k, c1, c2, del, cnt;
void DFS(int u){
if(u == del) return;
vis[u] = true;
for(int v = 1; v <= n; v++){
if(vis[v] == false && G[u][v] != Inf){
DFS(v);
}
}
}
int main(){
cin >> n >> m >> k;
fill(G[0], G[0] + maxn * maxn, Inf);
for(int i = 1; i <= m; i++){
cin >> c1 >> c2;
G[c1][c2] = 1; G[c2][c1] = 1;
}
for(int i = 0; i < k; i++){
cin >> del;
memset(vis, false, sizeof(vis));
int cnt = 0;
for(int u = 1; u <= n; u++){
if(u != del && vis[u] == false){
DFS(u);
cnt++;
}
}
cout << cnt - 1 << endl;
}
return 0;
}
#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
const int maxn = 1011;
vector<int> G[maxn];
bool vis[maxn];
int n, m, k, c1, c2, del, cnt;
void DFS(int x){
if(x == del) return;
vis[x] = true;
for(int i = 0; i < G[x].size(); i++){
if(vis[G[x][i]] == false)
DFS(G[x][i]);
}
}
int main(){
scanf("%d %d %d", &n, &m, &k);
for(int i = 0; i < m; i++){
scanf("%d %d", &c1, &c2);
G[c1].push_back(c2); G[c2].push_back(c1);
}
for(int i = 0; i < k; i++){
scanf("%d", &del);
memset(vis, false, sizeof(vis));
int cnt = 0;
for(int j = 1; j <= n; j++){
if(j != del && vis[j] == false){
DFS(j); cnt++;
}
}
printf("%d\n", cnt - 1);
}
}