#include<bits/stdc++.h>
#define taskname "cross"
using namespace std;
const int lim = 5e4 + 5;
int n, m, d[lim];
vector<int>g[lim];
namespace sub13{
void solve(){
vector<int>ans, f(n + 1);
for(int i = 1; i <= n; i++){
fill(f.begin(), f.end(), -1);
f[i] = 0;
queue<int>q;
q.push(i);
while(!q.empty()){
int u = q.front();
q.pop();
for(int& v : g[u]){
if(f[v] == -1){
f[v] = f[u] + 1;
q.push(v);
}
}
}
ans.push_back(i);
for(int j = 1; j <= n; j++){
if(d[j] != -1 && d[j] != f[j]){
ans.pop_back();
break;
}
}
}
cout << ans.size() << "\n";
for(int& i : ans){
cout << i << " ";
}
}
}
namespace sub2{
void solve(){
if(d[1] == -1){
cout << n << "\n";
for(int i = 1; i <= n; i++){
cout << i << " ";
}
return;
}
vector<int>f(n + 1, -1);
f[1] = 0;
queue<int>q;
q.push(1);
while(!q.empty()){
int u = q.front();
q.pop();
for(int& v : g[u]){
if(f[v] == -1){
f[v] = f[u] + 1;
q.push(v);
}
}
}
vector<int>ans;
for(int i = 1; i <= n; i++){
if(f[i] == d[1]){
ans.push_back(i);
}
}
cout << ans.size() << "\n";
for(int& i : ans){
cout << i << " ";
}
}
}
namespace sub4{
bitset<lim>cnt[lim];
vector<int>ans;
int f[lim];
vector<int>ver[lim];
void solve(){
memset(f, -1, sizeof(f));
int sd = 0;
for(int i = 1; i <= n; i++){
cnt[i].reset();
if(d[i] != -1){
ver[f[i] = d[i]].push_back(i);
cnt[i][i] = true;
sd++;
}
}
if(sd == 0){
cout << n << "\n";
for(int i = 1; i <= n; i++){
cout << i << " ";
}
return;
}
for(int i = n; i > 0; i--){
for(int& u : ver[i]){
for(int& v : g[u]){
if(f[v] == -1){
ver[f[v] = f[u] - 1].push_back(v);
}
}
}
for(int& u : ver[i]){
for(int& v : g[u]){
if(f[v] == f[u] - 1){
cnt[v] |= cnt[u];
}
}
}
}
vector<int>ans;
for(int& i : ver[0]){
if(cnt[i].count() == sd){
ans.push_back(i);
}
}
cout << ans.size() << "\n";
sort(ans.begin(), ans.end());
for(int& i : ans){
cout << i << " ";
}
}
}
int main(){
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
if(fopen(taskname".inp", "r")){
freopen(taskname".inp", "r", stdin);
freopen(taskname".out", "w", stdout);
}
cin >> n >> m;
for(int i = 0; i < m; i++){
int u, v;
cin >> u >> v;
g[u].push_back(v);
g[v].push_back(u);
}
for(int i = 1; i <= n; i++){
cin >> d[i];
}
if(max(n, m) <= 5000){
sub13::solve();
}
else if(*max_element(d + 2, d + n + 1) == -1){
sub2::solve();
}
else{
sub4::solve();
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSB0YXNrbmFtZSAiY3Jvc3MiCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmNvbnN0IGludCBsaW0gPSA1ZTQgKyA1OwppbnQgbiwgbSwgZFtsaW1dOwp2ZWN0b3I8aW50PmdbbGltXTsKbmFtZXNwYWNlIHN1YjEzewoJdm9pZCBzb2x2ZSgpewoJCXZlY3RvcjxpbnQ+YW5zLCBmKG4gKyAxKTsKCQlmb3IoaW50IGkgPSAxOyBpIDw9IG47IGkrKyl7CgkJCWZpbGwoZi5iZWdpbigpLCBmLmVuZCgpLCAtMSk7CgkJCWZbaV0gPSAwOwoJCQlxdWV1ZTxpbnQ+cTsKCQkJcS5wdXNoKGkpOwoJCQl3aGlsZSghcS5lbXB0eSgpKXsKCQkJCWludCB1ID0gcS5mcm9udCgpOwoJCQkJcS5wb3AoKTsKCQkJCWZvcihpbnQmIHYgOiBnW3VdKXsKCQkJCQlpZihmW3ZdID09IC0xKXsKCQkJCQkJZlt2XSA9IGZbdV0gKyAxOwoJCQkJCQlxLnB1c2godik7CgkJCQkJfQoJCQkJfQoJCQl9CgkJCWFucy5wdXNoX2JhY2soaSk7CgkJCWZvcihpbnQgaiA9IDE7IGogPD0gbjsgaisrKXsKCQkJCWlmKGRbal0gIT0gLTEgJiYgZFtqXSAhPSBmW2pdKXsKCQkJCQlhbnMucG9wX2JhY2soKTsKCQkJCQlicmVhazsKCQkJCX0KCQkJfQoJCX0KCQljb3V0IDw8IGFucy5zaXplKCkgPDwgIlxuIjsKCQlmb3IoaW50JiBpIDogYW5zKXsKCQkJY291dCA8PCBpIDw8ICIgIjsKCQl9Cgl9Cn0KbmFtZXNwYWNlIHN1YjJ7Cgl2b2lkIHNvbHZlKCl7CgkJaWYoZFsxXSA9PSAtMSl7CgkJCWNvdXQgPDwgbiA8PCAiXG4iOwoJCQlmb3IoaW50IGkgPSAxOyBpIDw9IG47IGkrKyl7CgkJCQljb3V0IDw8IGkgPDwgIiAiOwoJCQl9CgkJCXJldHVybjsKCQl9CgkJdmVjdG9yPGludD5mKG4gKyAxLCAtMSk7CgkJZlsxXSA9IDA7CgkJcXVldWU8aW50PnE7CgkJcS5wdXNoKDEpOwoJCXdoaWxlKCFxLmVtcHR5KCkpewoJCQlpbnQgdSA9IHEuZnJvbnQoKTsKCQkJcS5wb3AoKTsKCQkJZm9yKGludCYgdiA6IGdbdV0pewoJCQkJaWYoZlt2XSA9PSAtMSl7CgkJCQkJZlt2XSA9IGZbdV0gKyAxOwoJCQkJCXEucHVzaCh2KTsKCQkJCX0KCQkJfQoJCX0KCQl2ZWN0b3I8aW50PmFuczsKCQlmb3IoaW50IGkgPSAxOyBpIDw9IG47IGkrKyl7CgkJCWlmKGZbaV0gPT0gZFsxXSl7CgkJCQlhbnMucHVzaF9iYWNrKGkpOwoJCQl9CgkJfQoJCWNvdXQgPDwgYW5zLnNpemUoKSA8PCAiXG4iOwoJCWZvcihpbnQmIGkgOiBhbnMpewoJCQljb3V0IDw8IGkgPDwgIiAiOwoJCX0KCX0KfQpuYW1lc3BhY2Ugc3ViNHsKCWJpdHNldDxsaW0+Y250W2xpbV07Cgl2ZWN0b3I8aW50PmFuczsKCWludCBmW2xpbV07Cgl2ZWN0b3I8aW50PnZlcltsaW1dOwoJdm9pZCBzb2x2ZSgpewoJCW1lbXNldChmLCAtMSwgc2l6ZW9mKGYpKTsKCQlpbnQgc2QgPSAwOwoJCWZvcihpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKXsKCQkJY250W2ldLnJlc2V0KCk7CgkJCWlmKGRbaV0gIT0gLTEpewoJCQkJdmVyW2ZbaV0gPSBkW2ldXS5wdXNoX2JhY2soaSk7CgkJCQljbnRbaV1baV0gPSB0cnVlOwoJCQkJc2QrKzsKCQkJfQoJCX0KCQlpZihzZCA9PSAwKXsKCQkJY291dCA8PCBuIDw8ICJcbiI7CgkJCWZvcihpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKXsKCQkJCWNvdXQgPDwgaSA8PCAiICI7CgkJCX0KCQkJcmV0dXJuOwoJCX0KCQlmb3IoaW50IGkgPSBuOyBpID4gMDsgaS0tKXsKCQkJZm9yKGludCYgdSA6IHZlcltpXSl7CgkJCQlmb3IoaW50JiB2IDogZ1t1XSl7CgkJCQkJaWYoZlt2XSA9PSAtMSl7CgkJCQkJCXZlcltmW3ZdID0gZlt1XSAtIDFdLnB1c2hfYmFjayh2KTsJCQoJCQkJCX0KCQkJCX0KCQkJfQoJCQlmb3IoaW50JiB1IDogdmVyW2ldKXsKCQkJCWZvcihpbnQmIHYgOiBnW3VdKXsKCQkJCQlpZihmW3ZdID09IGZbdV0gLSAxKXsKCQkJCQkJY250W3ZdIHw9IGNudFt1XTsKCQkJCQl9CgkJCQl9CgkJCX0KCQl9CgkJdmVjdG9yPGludD5hbnM7CgkJZm9yKGludCYgaSA6IHZlclswXSl7CgkJCWlmKGNudFtpXS5jb3VudCgpID09IHNkKXsKCQkJCWFucy5wdXNoX2JhY2soaSk7CgkJCX0KCQl9CgkJY291dCA8PCBhbnMuc2l6ZSgpIDw8ICJcbiI7CgkJc29ydChhbnMuYmVnaW4oKSwgYW5zLmVuZCgpKTsKCQlmb3IoaW50JiBpIDogYW5zKXsKCQkJY291dCA8PCBpIDw8ICIgIjsKCQl9Cgl9Cn0KaW50IG1haW4oKXsKCWlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7IGNpbi50aWUoMCk7IGNvdXQudGllKDApOwoJaWYoZm9wZW4odGFza25hbWUiLmlucCIsICJyIikpewoJCWZyZW9wZW4odGFza25hbWUiLmlucCIsICJyIiwgc3RkaW4pOwoJCWZyZW9wZW4odGFza25hbWUiLm91dCIsICJ3Iiwgc3Rkb3V0KTsKCX0KCWNpbiA+PiBuID4+IG07Cglmb3IoaW50IGkgPSAwOyBpIDwgbTsgaSsrKXsKCQlpbnQgdSwgdjsKCQljaW4gPj4gdSA+PiB2OwoJCWdbdV0ucHVzaF9iYWNrKHYpOwoJCWdbdl0ucHVzaF9iYWNrKHUpOwoJfQoJZm9yKGludCBpID0gMTsgaSA8PSBuOyBpKyspewoJCWNpbiA+PiBkW2ldOwoJfQoJaWYobWF4KG4sIG0pIDw9IDUwMDApewoJCXN1YjEzOjpzb2x2ZSgpOwoJfQoJZWxzZSBpZigqbWF4X2VsZW1lbnQoZCArIDIsIGQgKyBuICsgMSkgPT0gLTEpewoJCXN1YjI6OnNvbHZlKCk7Cgl9CgllbHNlewoJCXN1YjQ6OnNvbHZlKCk7Cgl9Cn0=