#include <bits/stdc++.h>
using namespace std;
int n, m, h, t;
int du[100010];
struct EE {
  int u, v, ne;
} e[200010];
int e_si, head[100010];
void adde(int a, int b) {
  e_si++;
  du[a]++;
  e[e_si].u = a;
  e[e_si].v = b;
  e[e_si].ne = head[a];
  head[a] = e_si;
}
int vis[100010];
int stac[100010], top;
void in(int u) {
  vis[u] = 1;
  stac[top++] = u;
}
void out() {
  while (top) {
    vis[stac[top - 1]] = 0;
    top--;
  }
}
bool pd(int u, int v) {
  bool ret;
  if (du[u] <= h) return false;
  if (du[v] <= t) return false;
  int hh = h, tt = t;
  int num = 0, i;
  in(u);
  in(v);
  vis[u]++;
  vis[v]++;
  for (i = head[u]; i != -1 && num <= 200; i = e[i].ne) {
    if (!vis[e[i].v]) {
      in(e[i].v);
      num++;
    } else
      vis[e[i].v]++;
  }
  for (i = head[v]; i != -1 && num <= 400; i = e[i].ne) {
    if (!vis[e[i].v]) {
      in(e[i].v);
      num++;
    } else
      vis[e[i].v]++;
  }
  if (num < h + t) {
    out();
    return false;
  }
  printf("YES\n%d %d\n", u, v);
  for (i = head[u]; i != -1 && hh; i = e[i].ne) {
    if (vis[e[i].v] == 1) {
      if (hh == 1)
        printf("%d\n", e[i].v);
      else
        printf("%d ", e[i].v);
      hh--;
      vis[e[i].v] = 0;
    }
  }
  for (i = head[u]; i != -1 && hh; i = e[i].ne) {
    if (vis[e[i].v] == 2) {
      if (hh == 1)
        printf("%d\n", e[i].v);
      else
        printf("%d ", e[i].v);
      hh--;
      vis[e[i].v] = 0;
    }
  }
  for (i = head[v]; i != -1 && tt; i = e[i].ne) {
    if (vis[e[i].v] == 1) {
      if (tt == 1)
        printf("%d\n", e[i].v);
      else
        printf("%d ", e[i].v);
      tt--;
      vis[e[i].v] = 0;
    }
  }
  for (i = head[v]; i != -1 && tt; i = e[i].ne) {
    if (vis[e[i].v] == 2) {
      if (tt == 1)
        printf("%d\n", e[i].v);
      else
        printf("%d ", e[i].v);
      tt--;
      vis[e[i].v] = 0;
    }
  }
  out();
  return true;
}
int main() {
  scanf("%d%d%d%d", &n, &m, &h, &t);
  memset(du, 0, sizeof(du));
  memset(head, -1, sizeof(head));
  memset(vis, 0, sizeof(vis));
  top = 0;
  e_si = -1;
  for (int i = 1; i <= m; i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    adde(a, b);
    adde(b, a);
  }
  bool suc = false;
  for (int i = 0; i < e_si; i++) {
    int a = e[i].u, b = e[i].v;
    if (pd(a, b)) {
      suc = true;
      break;
    }
  }
  if (!suc) printf("NO\n");
}
