#include #include #include #include #include #include #include #include #include static const int MOD = 1000000007; using ll = long long; using u32 = unsigned; using u64 = unsigned long long; using namespace std; template constexpr T INF = ::numeric_limits::max() / 32 * 15 + 208; int main() { int n, m; cin >> n >> m; vector A(n); for (auto &&i : A) scanf("%d", &i); vector> G(n); for (int i = 0; i < m; ++i) { int u, v; scanf("%d %d", &u, &v); u--; v--; G[u].emplace_back(v); G[v].emplace_back(u); } auto f = [&](int a, int b){ return A[a] < A[b]; }; set s(f); int k; cin >> k; for (int i = 0; i < k; ++i) { int x; scanf("%d", &x); s.emplace(x-1); } vector ans; while(!s.empty()){ int a = *s.begin(); ans.emplace_back(a); s.erase(a); for (auto &&b : G[a]) { if(A[a] < A[b]) { if(s.count(b)) s.erase(b); else s.emplace(b); } } } cout << ans.size() << "\n"; for (auto &&i : ans) { cout << i+1 << "\n"; } return 0; }