#include <bits/stdc++.h>
const int N = 100000 + 10;
const int E = N << 1;
struct Edge {
  int v, nex;
  Edge() {}
  Edge(int _v, int _nex) {
    v = _v;
    nex = _nex;
  }
} eg[E];
int g[N], idx = 0;
int n, L, R;
void addedge(int u, int v) {
  eg[idx] = Edge(v, g[u]);
  g[u] = idx++;
}
int id[N], in[N];
int main() {
  memset(g, -1, sizeof g);
  int n, m, u, v;
  scanf("%d%d%d%d", &n, &m, &L, &R);
  memset(in, -1, sizeof in);
  while (m-- > 0) {
    scanf("%d%d", &u, &v);
    addedge(u, v);
    addedge(v, u);
    ++in[u];
    ++in[v];
  }
  memset(id, 0, sizeof id);
  int dep = 1, a, b, c;
  for (int i = 0; i < idx; i += 2) {
    u = eg[i].v;
    v = eg[i + 1].v;
    if (in[u] < L && in[u] < R) continue;
    if (in[v] < L && in[v] < R) continue;
    a = b = c = 0;
    dep += 2;
    for (int j = g[u]; j != -1; j = eg[j].nex) {
      int to = eg[j].v;
      if (to == u || to == v) continue;
      if (id[to] != dep) {
        id[to] = dep;
        ++a;
      }
    }
    for (int j = g[v]; j != -1; j = eg[j].nex) {
      int to = eg[j].v;
      if (to == u || to == v) continue;
      if (id[to] != dep) {
        id[to] = dep;
        ++b;
      } else if (id[to] == dep) {
        id[to] = -dep;
        ++c;
        --a;
      }
    }
    int geta = 0, getb = 0;
    if (a < L) geta = L - a;
    if (b < R) getb = R - b;
    if (geta + getb > c) {
      geta = getb = 0;
      std::swap(a, b);
      std::swap(u, v);
      if (a < L) geta = L - a;
      if (b < R) getb = R - b;
      if (geta + getb > c) continue;
    }
    puts("YES");
    printf("%d %d\n", u, v);
    for (int j = g[u]; j != -1 && L; j = eg[j].nex) {
      int to = eg[j].v;
      if (to == u || to == v) continue;
      if (id[to] == -dep && geta > 0) {
        --geta;
        id[to] = dep;
      }
      if (id[to] == dep) {
        id[to] = dep + 1;
        printf("%d", to);
        if (--L) putchar(' ');
      }
    }
    puts("");
    for (int j = g[v]; j != -1 && R; j = eg[j].nex) {
      int to = eg[j].v;
      if (to == u || to == v) continue;
      if (id[to] == dep + 1) continue;
      if (id[to] == -dep && getb > 0) {
        --getb;
        id[to] = dep;
      }
      if (id[to] == dep) {
        printf("%d", to);
        if (--R) putchar(' ');
      }
    }
    puts("");
    return 0;
  }
  puts("NO");
  return 0;
}
