#include <bits/stdc++.h>
using namespace std;
const int MN = 2e5 + 10;
int N, M, s, t, ds, dt;
vector<int> graf[MN];
bool mark[MN];
struct CC {
  int toT, toS;
} cc;
vector<CC> toAmb;
vector<pair<int, int> > aris;
void dfs(int nod, CC& comp) {
  mark[nod] = 1;
  for (int newn : graf[nod])
    if (!mark[newn]) {
      if (newn == s)
        comp.toS = nod;
      else if (newn == t)
        comp.toT = nod;
      else {
        aris.push_back(pair<int, int>(nod, newn));
        dfs(newn, comp);
      }
    }
}
void imprimir() {
  cout << "Yes\n";
  for (int i = 0; i < (int)aris.size(); i++)
    cout << aris[i].first << " " << aris[i].second << "\n";
}
int main() {
  cin.tie(0);
  ios_base::sync_with_stdio(0);
  int a, b, M;
  cin >> N >> M;
  while (M--) {
    cin >> a >> b;
    graf[a].push_back(b);
    graf[b].push_back(a);
  }
  cin >> s >> t >> ds >> dt;
  for (int i = 1; i <= N; i++)
    if (i != s && i != t && !mark[i]) {
      cc.toS = cc.toT = false;
      dfs(i, cc);
      if (cc.toS && !cc.toT) {
        aris.push_back(pair<int, int>(s, cc.toS));
        ds--;
      } else if (!cc.toS && cc.toT) {
        aris.push_back(pair<int, int>(t, cc.toT));
        dt--;
      } else {
        toAmb.push_back(cc);
      }
    }
  if (ds < 0 || dt < 0) {
    cout << "No\n";
    return 0;
  }
  bool hay = false;
  for (int i : graf[s])
    if (i == t) hay = true;
  if (!hay) {
    ds--;
    dt--;
    aris.push_back(pair<int, int>(s, toAmb[0].toS));
    aris.push_back(pair<int, int>(t, toAmb[0].toT));
    for (int i = 1; i < (int)toAmb.size(); i++) {
      if (ds > 0) {
        ds--;
        aris.push_back(pair<int, int>(s, toAmb[i].toS));
      } else {
        dt--;
        aris.push_back(pair<int, int>(t, toAmb[i].toT));
      }
    }
  } else {
    if (toAmb.size() == 0) {
      ds--;
      dt--;
      aris.push_back(pair<int, int>(s, t));
    } else {
      ds--;
      dt--;
      aris.push_back(pair<int, int>(s, toAmb[0].toS));
      aris.push_back(pair<int, int>(t, toAmb[0].toT));
      for (int i = 1; i < (int)toAmb.size(); i++) {
        if (ds > 0) {
          ds--;
          aris.push_back(pair<int, int>(s, toAmb[i].toS));
        } else {
          dt--;
          aris.push_back(pair<int, int>(t, toAmb[i].toT));
        }
      }
    }
  }
  if (ds < 0 || dt < 0) {
    cout << "No\n";
  } else
    imprimir();
  return 0;
}
