#include <bits/stdc++.h>
using namespace std;
const int N = 100000;
int n, m;
vector<int> g[N];
int a[N];
int b[N];
int main() {
  scanf("%i%i", &n, &m);
  for (int i = 0; i < m; i++) {
    int u, v;
    scanf("%i%i", &u, &v);
    u--;
    v--;
    g[u].push_back(v);
    g[v].push_back(u);
  }
  for (int i = 0; i < n; i++) scanf("%i", &a[i]);
  for (int i = 0; i < n; i++) b[i] = 1 + (int)g[i].size();
  set<pair<int, int> > q;
  set<int> ans;
  for (int i = 0; i < n; i++) {
    if (b[i] - a[i] >= 0) q.insert(make_pair(b[i] - a[i], i));
    ans.insert(i + 1);
  }
  while (!q.empty()) {
    int v = q.begin()->second;
    q.erase(q.begin());
    if (b[v] - a[v] != 0) break;
    b[v]--;
    ans.erase(v + 1);
    for (int i = 0; i < (int)g[v].size(); i++) {
      int j = g[v][i];
      if (b[j] - a[j] >= 0) {
        q.erase(make_pair(b[j] - a[j], j));
        b[j]--;
        if (b[j] - a[j] >= 0) q.insert(make_pair(b[j] - a[j], j));
      }
    }
  }
  printf("%i\n", (int)ans.size());
  for (set<int>::iterator i = ans.begin(); i != ans.end(); i++)
    printf("%i ", *i);
  return 0;
}
