#include <bits/stdc++.h>
using namespace std;
const int sz = 1500000;
const long long MAX = 10000000000000000;
template <typename T>
T abs(T a) {
  return a < 0 ? -a : a;
}
int main() {
  int n, m;
  cin >> n >> m;
  vector<vector<int> > graph(n);
  for (long long i = 0; i < m; i++) {
    int u, v;
    cin >> u >> v;
    graph[u - 1].push_back(v - 1);
    graph[v - 1].push_back(u - 1);
  }
  vector<int> val(n, 0);
  set<int> q;
  vector<int> flag(n, 0);
  vector<int> a(n);
  for (long long i = 0; i < n; i++) {
    cin >> a[i];
    if (!a[i]) {
      q.insert(i);
    }
  }
  vector<int> ans;
  while (!q.empty()) {
    int top = *q.begin();
    q.erase(q.begin());
    if (flag[top]) {
      return 1;
    }
    val[top]++;
    flag[top] = true;
    ans.push_back(top);
    for (vector<int>::iterator i = graph[top].begin(); i != graph[top].end();
         i++) {
      val[*i]++;
      if (val[*i] == a[*i]) {
        q.insert(*i);
      }
    }
  }
  cout << ans.size() << endl;
  for (vector<int>::iterator i = ans.begin(); i != ans.end(); i++) {
    cout << (*i) + 1 << ' ';
  }
  return 0;
}
