#include <bits/stdc++.h>
const int MAXN = 1e3 + 10;
int n, m, k;
int c[MAXN];
namespace dsu {
int fa[MAXN];
void init() {
  for (int i = 1; i <= n; i++) {
    fa[i] = i;
  }
}
int find(int x) { return fa[x] == x ? x : fa[x] = find(fa[x]); }
void unite(int x, int y) { fa[find(x)] = find(y); }
}  // namespace dsu
namespace solver1 {
int sz[MAXN];
void main() {
  for (int i = 1; i <= n; i++) {
    sz[dsu::find(i)]++;
  }
  static int szp[MAXN];
  for (int i = 1; i <= k; i++) {
    szp[i] = sz[dsu::find(c[i])];
  }
  std::sort(szp + 1, szp + k + 1);
  int tot = 0;
  int ans = 0;
  for (int i = 1; i <= k; i++) {
    tot += szp[i];
  }
  szp[k] += n - tot;
  for (int i = 1; i <= k; i++) {
    ans += (szp[i]) * (szp[i] - 1) / 2;
  }
  printf("%d\n", ans - m);
}
}  // namespace solver1
int main() {
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 1; i <= k; i++) {
    scanf("%d", c + i);
  }
  dsu::init();
  for (int i = 1; i <= m; i++) {
    int u, v;
    scanf("%d%d", &u, &v);
    dsu::unite(u, v);
  }
  solver1::main();
}
