#include using namespace std; using ll = long long; #define rep(i, n) for (int i=0; i<(int)(n); ++(i)) #define rep3(i, m, n) for (int i=(m); (i)<(int)(n); ++(i)) #define repr(i, n) for (int i=(int)(n)-1; (i)>=0; --(i)) #define rep3r(i, m, n) for (int i=(int)(n)-1; (i)>=(int)(m); --(i)) #define all(x) (x).begin(), (x).end() int main() { int n, m, k; cin >> n >> m; vector a(n); map> aval; rep(i, n) { cin >> a[i]; aval[a[i]].push_back(i); } vector> g(n); rep(i, m) { int ui, vi; cin >> ui >> vi; --ui; --vi; g[ui].push_back(vi); g[vi].push_back(ui); } cin >> k; vector sw(n); rep(i, k) { int bi; cin >> bi; --bi; sw[bi] = true; } vector res; for (auto p : aval) { rep(i, (int)(p.second.size())) { if (sw[p.second[i]]) { res.push_back(p.second[i]+1); sw[p.second[i]] = false; rep(j, (int)(g[p.second[i]].size())) if (a[g[p.second[i]][j]] > a[p.second[i]]) { sw[g[p.second[i]][j]] = (!sw[g[p.second[i]][j]]); } } } } bool ok = true; rep(i, n) if (sw[i]) ok = false; if (ok) { cout << (int)(res.size()) << endl; rep(i, (int)(res.size())) cout << res[i] << endl; } else cout << -1 << endl; return 0; }