#include <bits/stdc++.h>
using namespace std;
const int MAX_MEM = (int)240 * 1024 * 1024;
int mpos, max_mpos;
char memory[MAX_MEM];
inline void *operator new(size_t n) {
  char *res = memory + mpos;
  mpos += n;
  assert(mpos <= MAX_MEM);
  return (void *)res;
}
inline void operator delete(void *) {}
const double EPS = 1e-8;
vector<bool> cas;
vector<vector<int> > g;
vector<int> bg, cur;
set<pair<double, int> > ans;
vector<int> mem;
vector<bool> del;
bool bigger(double a, double b) { return (a - EPS > b); }
bool smaller(double a, double b) { return (a + EPS < b); }
bool eq(double a, double b) { return (a - EPS < b) && (a + EPS > b); }
bool check(double x) {
  int n = cur.size();
  ans.clear();
  del.clear();
  del.resize(n, false);
  for (int i = 0; i < n; ++i) {
    if (cas[i]) {
      del[i] = true;
      continue;
    }
    cur[i] = bg[i];
    ans.insert(make_pair(1.0 - (double)bg[i] / (double)g[i].size(), i));
  }
  for (;;) {
    if (ans.size() == 0) {
      return false;
    }
    pair<double, int> c = *(ans.begin());
    if (!smaller(c.first, x)) {
      return true;
    }
    ans.erase(c);
    del[c.second] = true;
    for (int i = 0; i < (int)g[c.second].size(); ++i) {
      int to = g[c.second][i];
      if (del[to]) {
        continue;
      }
      pair<double, int> curc =
          make_pair(1.0 - (double)cur[to] / (double)g[to].size(), to);
      ++cur[to];
      ans.erase(curc);
      ans.insert(make_pair(1.0 - (double)cur[to] / (double)g[to].size(), to));
    }
  }
}
void binsearch() {
  double l = 0.0;
  double r = 1.0 + EPS;
  for (; r - l > EPS;) {
    double m = (r + l) / 2;
    if (check(m)) {
      l = m;
      mem.clear();
      for (set<pair<double, int> >::iterator it = ans.begin(); it != ans.end();
           ++it) {
        mem.push_back((*it).second + 1);
      }
    } else {
      r = m;
    }
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  int n, m, k;
  cin >> n >> m >> k;
  cas.resize(n, false);
  bg.resize(n);
  cur.resize(n);
  g.resize(n);
  for (int i = 0; i < k; ++i) {
    int a;
    cin >> a;
    --a;
    cas[a] = true;
  }
  for (int i = 0; i < m; ++i) {
    int a, b;
    cin >> a >> b;
    --a, --b;
    g[a].push_back(b);
    g[b].push_back(a);
  }
  for (int i = 0; i < n; ++i) {
    bg[i] = 0;
    for (int j = 0; j < (int)g[i].size(); ++j) {
      if (cas[g[i][j]]) {
        bg[i] += 1;
      }
    }
  }
  binsearch();
  cout << mem.size() << endl;
  for (int i = 0; i < (int)mem.size(); ++i) {
    cout << mem[i] << " ";
  }
  cout << endl;
  return 0;
}
