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;
}