#include <bits/stdc++.h>
using namespace std;
long long n, m, s, t, ds, dt, par[400005], cnt = 0, id[400005];
long long g[400005][2], dd[400005][2];
pair<long long, long long> e[400005];
vector<pair<long long, long long> > res;
long long Find(long long u) {
  if (u != par[u]) par[u] = Find(par[u]);
  return par[u];
}
bool Join(long long u, long long v) {
  u = Find(u);
  v = Find(v);
  if (u == v) return 0;
  par[v] = u;
  return 1;
}
bool check(long long u, long long v) {
  u = Find(u);
  v = Find(v);
  if (u == v) return 0;
  return 1;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> m;
  for (int i = 1; i <= m; i++) cin >> e[i].first >> e[i].second;
  cin >> s >> t >> ds >> dt;
  for (int i = 1; i <= n; i++) par[i] = i;
  for (int i = 1; i <= m; i++) {
    long long u = e[i].first, v = e[i].second;
    if (u == s || u == t || v == s || v == t) continue;
    if (Join(u, v)) res.push_back({u, v});
  }
  for (int i = 1; i <= m; i++) {
    long long u = e[i].first, v = e[i].second;
    if (u == s || u == t || v == s || v == t) {
      if ((u == s && v == t) || (u == t && v == s)) continue;
      if (u == s || u == t) swap(u, v);
      u = Find(u);
      if (!id[u]) id[u] = ++cnt;
      if (v == s)
        g[id[u]][0] = 1;
      else
        g[id[u]][1] = 1;
    }
  }
  long long ans = 0, pos1, pos2 = cnt, p = 0;
  for (int i = 1; i <= cnt; i++)
    if (g[i][0] + g[i][1] == 2) {
      ans++;
      if (ans == 1) pos1 = i;
    } else if (g[i][0] == 1)
      ds--;
    else
      dt--;
  for (int i = 1; i <= cnt; i++)
    if (g[i][0] + g[i][1] == 2) {
      p++;
      if (p == ds) pos2 = i;
    }
  if (ds <= 0 || dt <= 0 || ans + 1 > ds + dt)
    cout << "No";
  else {
    if (ans == 0) res.push_back({s, t});
    for (int i = 1; i <= m; i++) {
      long long u = e[i].first, v = e[i].second;
      if (u == s || u == t || v == s || v == t) {
        if ((u == s && v == t) || (u == t && v == s)) continue;
        if (u == s || u == t) swap(u, v);
        long long h = u;
        u = Find(u);
        if (g[id[u]][0] + g[id[u]][1] == 2) {
          if (id[u] == pos1) {
            if (v == s && !dd[id[u]][0]) {
              res.push_back({h, v});
              dd[id[u]][0] = 1;
            }
            if (v == t && !dd[id[u]][1]) {
              res.push_back({h, v});
              dd[id[u]][1] = 1;
            }
          } else if (id[u] <= pos2) {
            if (v == s && !dd[id[u]][0]) {
              res.push_back({h, v});
              dd[id[u]][0] = 1;
            }
          } else {
            if (v == t && !dd[id[u]][1]) {
              res.push_back({h, v});
              dd[id[u]][1] = 1;
            }
          }
        } else {
          if (!dd[id[u]][0]) {
            res.push_back({h, v});
            dd[id[u]][0] = 1;
          }
        }
      }
    }
    cout << "Yes" << '\n';
    for (auto x : res) cout << x.first << " " << x.second << '\n';
  }
  return 0;
}
