#include <iostream>
#include <vector>
using namespace std;
int tree[1010], sum[1010];
void init(int n)
{
int i;
for(i = 1; i <= n; i++)
{
tree[i] = -1;
sum[i] = 1;
}
}
int findroot(int root)
{
if(tree[root] == -1)
{
return root;
}
else
{
tree[root] = findroot(tree[root]);
return tree[root];
}
}
int getrootcount(int n)
{
int i, count = 0;
for(i = 1; i <= n; i++)
{
if(tree[i] == -1)
{
count++;
}
}
return count;
}
void buildrelation(int index[2])
{
int i;
for(i = 0; i <= 1; i++)
{
index[i] = findroot(index[i]);
}
int index0 = index[0], index1 = index[1];
if(index0 != index1)
{
if(sum[index1] > sum[index0])
{
index0 = index[1];
index1 = index[0];
}
tree[index1] = index0;
sum[index0] += sum[index1];
}
}
int main()
{
int n, m, k;
scanf("%d%d%d", &n, &m, &k);
int i, a, b;
vector<int> v[1010];
for(i = 1; i <= m; i++)
{
scanf("%d%d", &a, &b);
v[a].push_back(b);
v[b].push_back(a);
}
int cur, j, size, p, index[2];
for(i = 1; i <= k; i++)
{
scanf("%d", &cur);
init(n);
for(j = 1; j <= n; j++)
{
if(j != cur)
{
size = v[j].size();
index[0] = j;
for(p = 0; p < size; p++)
{
index[1] = v[j][p];
if(index[1] != cur)
{
buildrelation(index);
}
}
}
}
printf("%d\n", getrootcount(n) - 2);
}
system("pause");
return 0;
}