include <bits/stdc++.h>
using namespace std; int g[1001][1001],alltime[1001]; vector vis(1001),temp(1); int n,m,k; void dfs(int x) { vis[x]=1; alltime[x]=1; for(int i=0;i<n;i++) { if(g[x][i]==1&&vis[i]==0) { dfs(i); temp.push_back(i); } } } int main() {
cin>>n>>m>>k;
int f;
vector <int> a(k);
map <int,vector<int> > b;
long long ans=0;
for(int i=0;i<k;i++)
{
cin>>f;
f--;
a[i]=f;
}
int x,y;
for(int i=0;i<m;i++)
{
cin>>x>>y;
x--;
y--;
g[x][y]=1;;
g[y][x]=1;
}
for(int i=0;i<k;i++)
{
temp.clear();
temp.push_back(a[i]);
vis.clear();
dfs(a[i]);
b[i]=temp;
}
for(int i=0;i<n;i++)
{
if(alltime[a[i]]==0)
{
temp.push_back(a[i]);
vis.clear();
dfs(a[i]);
}
}
int maxlen=0,ind=0;
for(int i=0;i<k;i++)
{
vector <int> arr(b[a[i]]);
if(maxlen<arr.size())
{
maxlen=arr.size();
}
for(int j=0;j<arr.size();j++)
{
for(int l=j+1;l<arr.size();l++)
{
if(g[arr[j]][arr[l]]!=1)
{
ans++;
}
}
}
}
if(temp.size()!=0)
{
for(int i=0;i<temp.size();i++)
{
for(int j=i+1;j<temp.size();j++)
{
if(g[temp[i]][temp[j]]!=1)
{
ans++;
}
}
}
}
ans+=temp.size()*maxlen;
cout<<ans;
return 0;}



