#include <bits/stdc++.h>
using namespace std;
const double PI = 3.141592653589793238;
long long powmod(long long a, long long b) {
  long long res = 1;
  a %= 1000000007;
  for (; b; b >>= 1) {
    if (b & 1) res = res * a % 1000000007;
    a = a * a % 1000000007;
  }
  return res;
}
int wt[400005], order[400005], u[400005], v[400005], s, t, ds, dt, par[400005];
bool vis[400005];
vector<pair<int, int> > vec;
bool comp(int a, int b) { return wt[a] < wt[b]; }
int root(int node) {
  return (par[node] < 0 ? node : (par[node] = root(par[node])));
}
int main() {
  int n, adj;
  scanf("%d", &n);
  scanf("%d", &adj);
  for (int i = 0; i < adj; i++) {
    scanf("%d", &u[i]);
    scanf("%d", &v[i]);
    order[i] = i;
  }
  scanf("%d %d %d %d", &s, &t, &ds, &dt);
  for (int i = 0; i < adj; i++) {
    if ((u[i] == s && v[i] == t) || (v[i] == s && u[i] == t)) {
      wt[i] = 3;
    } else if (u[i] == s || v[i] == s) {
      wt[i] = 2;
    } else if (u[i] == t || v[i] == t) {
      wt[i] = 1;
    } else {
      wt[i] = 0;
    }
  }
  sort(order, order + adj, comp);
  memset(par, -1, sizeof(par));
  for (int i = 0; i < adj; i++) {
    int ind = order[i];
    int par_u = root(u[ind]);
    int par_v = root(v[ind]);
    bool f = false;
    if (par_u != par_v) {
      if (wt[ind] == 1 && dt) {
        dt--;
        vec.push_back(make_pair(u[ind], v[ind]));
        f = true;
      } else if (wt[ind] == 2 && ds) {
        ds--;
        vec.push_back(make_pair(u[ind], v[ind]));
        f = true;
      } else if (wt[ind] == 3 && ds && dt) {
        ds--;
        dt--;
        vec.push_back(make_pair(u[ind], v[ind]));
        f = true;
      } else if (wt[ind] == 0) {
        vec.push_back(make_pair(u[ind], v[ind]));
        f = true;
      }
      if (f) {
        if (par[par_u] > par[par_v]) swap(par_v, par_u);
        par[par_u] += par[par_v];
        par[par_v] = par_u;
      }
    }
  }
  if (vec.size() != n - 1) {
    printf("No\n");
  } else {
    printf("Yes\n");
    for (int i = 0; i < vec.size(); i++) {
      printf("%d %d\n", vec[i].first, vec[i].second);
    }
  }
  return 0;
}
