#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5;
bool castle[maxn];
vector<int> g[maxn];
int deg[maxn];
bool seen[maxn];
int bad_neighbour[maxn];
int main() {
  ios_base::sync_with_stdio(false);
  int n, m, k;
  cin >> n >> m >> k;
  vector<int> cx;
  for (int _n(k), i(0); i < _n; i++) {
    int x;
    cin >> x;
    --x;
    cx.push_back(x);
    castle[x] = true;
  }
  for (int _n(m), i(0); i < _n; i++) {
    int a, b;
    cin >> a >> b;
    --a, --b;
    g[a].push_back(b);
    g[b].push_back(a);
    deg[a]++;
    deg[b]++;
  }
  vector<int> best;
  long double l = 0, r = 1;
  for (int _n(100), _(0); _ < _n; _++) {
    long double x = (l + r) / 2;
    for (int _n(n), i(0); i < _n; i++) seen[i] = false, bad_neighbour[i] = 0;
    for (int v : cx) seen[v] = true;
    vector<int> q = cx;
    for (int j = 0; j < (int)q.size(); ++j) {
      int v = q[j];
      for (int to : g[v]) {
        bad_neighbour[to]++;
        if (!seen[to] && !castle[to] && (1 - x) * deg[to] < bad_neighbour[to]) {
          seen[to] = true;
          q.push_back(to);
        }
      }
    }
    if ((int)q.size() < n) {
      l = x;
      best.clear();
      for (int _n(n), i(0); i < _n; i++)
        if (!seen[i]) best.push_back(i + 1);
    } else {
      r = x;
    }
  }
  cout << best.size() << endl;
  for (auto v : best) cout << v << " ";
  cout << endl;
  return 0;
}
