#include <bits/stdc++.h>
using namespace std;
int uf[200005];
vector<pair<int, int> > sol;
int find(int x) {
  if (uf[x] < 0) return x;
  return uf[x] = find(uf[x]);
}
void join(int xx, int yy) {
  int x = find(xx), y = find(yy);
  if (x == y) return;
  sol.push_back(make_pair(xx, yy));
  if (uf[x] > uf[y]) swap(x, y);
  uf[x] += uf[y];
  uf[y] = x;
}
int n, m;
pair<int, int> e[400005];
int s, t, ds, dt;
int demetrio[200005];
int wt[200005];
vector<int> ss, tt, bb;
int main() {
  scanf("%d%d", &n, &m);
  memset(uf, -1, sizeof(uf));
  for (int i = 0, to = m; i < to; ++i) {
    int x, y;
    scanf("%d%d", &x, &y);
    e[i] = make_pair(x - 1, y - 1);
  }
  scanf("%d%d%d%d", &s, &t, &ds, &dt);
  s--;
  t--;
  for (int i = 0, to = m; i < to; ++i) {
    if (e[i].first != s && e[i].second != s && e[i].first != t &&
        e[i].second != t)
      join(e[i].first, e[i].second);
  }
  memset(demetrio, -1, sizeof(demetrio));
  memset(wt, -1, sizeof(wt));
  for (int i = 0, to = m; i < to; ++i) {
    if (e[i].first == s || e[i].second == s)
      demetrio[find(e[i].first + e[i].second - s)] =
          e[i].first + e[i].second - s;
    if (e[i].first == t || e[i].second == t)
      wt[find(e[i].first + e[i].second - t)] = e[i].first + e[i].second - t;
  }
  for (int i = 0, to = n; i < to; ++i) {
    if (i == s || i == t || uf[i] >= 0) continue;
    if (demetrio[i] >= 0 && wt[i] >= 0)
      bb.push_back(i);
    else if (demetrio[i] >= 0)
      ss.push_back(i);
    else if (wt[i] >= 0)
      tt.push_back(i);
  }
  if (ds <= ss.size() || dt <= tt.size()) {
    puts("No");
    return 0;
  }
  ds -= ss.size();
  dt -= tt.size();
  for (int i = 0, to = ss.size(); i < to; ++i)
    sol.push_back(make_pair(s, demetrio[ss[i]]));
  for (int i = 0, to = tt.size(); i < to; ++i)
    sol.push_back(make_pair(t, wt[tt[i]]));
  if (ds + dt <= bb.size()) {
    puts("No");
    return 0;
  }
  for (int i = 0, to = bb.size(); i < to; ++i) {
    if (ds > 0) {
      sol.push_back(make_pair(s, demetrio[bb[i]]));
      ds--;
    } else {
      assert(dt > 1);
      sol.push_back(make_pair(t, wt[bb[i]]));
      dt--;
    }
  }
  if (!bb.size())
    sol.push_back(make_pair(s, t));
  else
    sol.push_back(make_pair(t, wt[bb[0]]));
  puts("Yes");
  assert(sol.size() == n - 1);
  for (int i = 0, to = sol.size(); i < to; ++i) {
    printf("%d %d\n", sol[i].first + 1, sol[i].second + 1);
  }
  return 0;
}
