#include <bits/stdc++.h>
using namespace std;
int MAX = 1000000;
int MIN = -1000000;
int INF = 1000000000;
int x4[4] = {0, 1, 0, -1};
int y4[4] = {1, 0, -1, 0};
int x8[8] = {0, 1, 1, 1, 0, -1, -1, -1};
int y8[8] = {1, 1, 0, -1, -1, -1, 0, 1};
int i, j, k;
int n, m, h, t, x[100010], y[100010], have[100010], sial[100010], aduh[100010];
vector<int> v[100010], A, B, C;
map<pair<int, int>, bool> M;
int main() {
  int mi, ma;
  cin >> n >> m >> h >> t;
  mi = min(h, t) + 1;
  ma = max(h, t) + 1;
  for (i = (0); i < (m); i++) {
    scanf("%d %d", &x[i], &y[i]);
    v[x[i]].push_back(y[i]);
    v[y[i]].push_back(x[i]);
    sial[x[i]]++;
    sial[y[i]]++;
  }
  for (int i = 0; i < m; i++) {
    if (min(sial[x[i]], sial[y[i]]) < mi || max(sial[x[i]], sial[y[i]]) < ma)
      continue;
    int a = x[i];
    int b = y[i];
    int a1 = v[a].size();
    int b1 = v[b].size();
    A.clear();
    B.clear();
    C.clear();
    A.reserve(sial[a]);
    B.reserve(sial[b]);
    C.reserve(sial[a]);
    for (int j = 0; j < a1; j++) aduh[v[a][j]] = 0;
    for (int j = 0; j < b1; j++) aduh[v[b][j]] = 0;
    for (int j = 0; j < a1; j++) aduh[v[a][j]]++;
    for (int j = 0; j < b1; j++) aduh[v[b][j]]++;
    for (int j = 0; j < a1; j++) {
      int z = v[a][j];
      if (aduh[z] == 1 && z != b) {
        A.push_back(z);
      } else if (z != b)
        C.push_back(z);
    }
    for (int j = 0; j < b1; j++) {
      int z = v[b][j];
      if (aduh[z] == 1 && z != a) {
        B.push_back(z);
      }
    }
    int Asize = A.size();
    int Bsize = B.size();
    int Csize = C.size();
    if (Asize >= h && Bsize >= t) {
      cout << "YES" << endl;
      cout << a << " " << b << endl;
      cout << A[0];
      for (int j = 1; j < h; j++) cout << " " << A[j];
      cout << endl;
      cout << B[0];
      for (int j = 1; j < t; j++) cout << " " << B[j];
      cout << endl;
      return 0;
    } else if (Asize >= t && Bsize >= h) {
      cout << "YES" << endl;
      cout << b << " " << a << endl;
      cout << B[0];
      for (int j = 1; j < h; j++) cout << " " << B[j];
      cout << endl;
      cout << A[0];
      for (int j = 1; j < t; j++) cout << " " << A[j];
      cout << endl;
      return 0;
    } else if (max((h - Asize), 0) + max(0, (t - Bsize)) <= Csize) {
      int indx = 0;
      while (A.size() < h) {
        A.push_back(C[indx]);
        indx++;
      }
      while (B.size() < t) {
        B.push_back(C[indx]);
        indx++;
      }
      cout << "YES" << endl;
      cout << a << " " << b << endl;
      cout << A[0];
      for (int j = 1; j < h; j++) cout << " " << A[j];
      cout << endl;
      cout << B[0];
      for (int j = 1; j < t; j++) cout << " " << B[j];
      cout << endl;
      return 0;
    } else if (max((t - Asize), 0) + max(0, (h - Bsize)) <= Csize) {
      int indx = 0;
      while (A.size() < t) {
        A.push_back(C[indx]);
        indx++;
      }
      while (B.size() < h) {
        B.push_back(C[indx]);
        indx++;
      }
      cout << "YES" << endl;
      cout << b << " " << a << endl;
      cout << B[0];
      for (int j = 1; j < h; j++) cout << " " << B[j];
      cout << endl;
      cout << A[0];
      for (int j = 1; j < t; j++) cout << " " << A[j];
      cout << endl;
      return 0;
    }
  }
  cout << "NO" << endl;
  return 0;
}
