#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100010;
const int MAXL = 100;
bool bad[MAXN];
vector<int> edges[MAXN];
int deg[MAXN];
int q[MAXN], rm[MAXN];
bool marked[MAXN];
int solve(int n, long double mid) {
  int f = 0, e = 0;
  for (int i = 0; i < n; i++) {
    rm[i] = 0;
    if (bad[i]) {
      marked[i] = true;
      q[e++] = i;
    } else
      marked[i] = false;
  }
  while (f < e) {
    int v = q[f++];
    for (int i = 0; i < edges[v].size(); i++) {
      int u = edges[v][i];
      if (marked[u]) continue;
      rm[u]++;
      if (deg[u] - rm[u] < deg[u] * mid) {
        marked[u] = true;
        q[e++] = u;
      }
    }
  }
  return e;
}
int main() {
  int n, m, k;
  cin >> n >> m >> k;
  for (int i = 0; i < k; i++) {
    int x;
    cin >> x;
    x--;
    bad[x] = true;
  }
  for (int i = 0; i < m; i++) {
    int a, b;
    cin >> a >> b;
    a--, b--;
    edges[a].push_back(b);
    edges[b].push_back(a);
    deg[a]++;
    deg[b]++;
  }
  long double lo = 0, hi = 1;
  for (int t = 0; t < MAXL; t++) {
    long double mid = (lo + hi) / 2;
    if (solve(n, mid) < n)
      lo = mid;
    else
      hi = mid;
  }
  solve(n, lo);
  int cnt = 0;
  for (int i = 0; i < n; i++)
    if (!marked[i]) cnt++;
  cout << cnt << endl;
  for (int i = 0; i < n; i++)
    if (!marked[i]) cout << i + 1 << " ";
  cout << endl;
}
