#include <bits/stdc++.h>
using namespace std;
const int max_N = 100000 + 10;
const int inf = 1e9;
vector<pair<int, int> > e;
vector<int> adj[max_N];
int h, t, a(-1), b(-1);
inline bool check(int u, int v) {
  int sz1 = adj[u].size(), sz2 = adj[v].size();
  if ((sz1 <= h || sz2 <= t) && (sz1 <= t || sz2 <= h)) return false;
  if ((sz1 > h + t && sz2 > t) || (sz2 > h + t && sz1 > h)) {
    a = u, b = v;
    return true;
  }
  if ((sz1 > h + t && sz2 > h) || (sz2 > h + t && sz1 > t)) {
    a = v, b = u;
    return true;
  }
  int i(0), j(0), cnt(0);
  while (i < sz1 && j < sz2) {
    if (adj[u][i] == adj[v][j])
      cnt++, i++, j++;
    else if (adj[u][i] > adj[v][j])
      j++;
    else
      i++;
  }
  int c1 = sz1 - cnt - 1, c2 = sz2 - cnt - 1;
  int tmp = ((h > c1) ? h - c1 : 0) + ((t > c2) ? t - c2 : 0);
  if (tmp <= cnt) {
    a = u, b = v;
    return true;
  }
  tmp = ((t > c1) ? t - c1 : 0) + ((h > c2) ? h - c2 : 0);
  if (tmp <= cnt) {
    a = v, b = u;
    return true;
  }
  return false;
}
int main() {
  int n, m;
  scanf("%d %d %d %d", &n, &m, &h, &t);
  for (int i = 0; i < m; i++) {
    int u, v;
    scanf("%d %d", &u, &v);
    adj[--u].push_back(--v);
    adj[v].push_back(u);
    e.push_back({u, v});
  }
  for (int i = 0; i < n; i++) sort(adj[i].begin(), adj[i].end());
  for (pair<int, int> x : e) {
    if (check(x.first, x.second)) break;
  }
  if (a == -1) {
    printf("NO\n");
    return 0;
  }
  printf("YES\n%d %d\n", a + 1, b + 1);
  int p1(0), p2(0), c(0), sz1 = adj[a].size(), sz2 = adj[b].size();
  vector<int> vc, cm;
  while (p1 < sz1 || p2 < sz2) {
    int x = (p1 < sz1) ? adj[a][p1] : inf;
    int y = (p2 < sz2) ? adj[b][p2] : inf;
    if (x == y)
      cm.push_back(x), p1++, p2++;
    else if (x < y) {
      if (x != b && c < h) printf("%d ", x + 1), c++;
      p1++;
    } else {
      if (y != a) vc.push_back(y);
      p2++;
    }
  }
  sz1 = vc.size();
  int j = 0, cnt(0);
  while (cnt < h - c) cnt++, printf("%d ", cm[j++] + 1);
  printf("\n");
  for (int i = 0; i < min(t, sz1); i++) printf("%d ", vc[i] + 1);
  cnt = 0;
  while (cnt < t - sz1) cnt++, printf("%d ", cm[j++] + 1);
  printf("\n");
  return 0;
}
