#include <bits/stdc++.h>
using namespace std;
vector<int> v[110000];
int a[110000], b[110000], vis[110000];
int now, h, t;
bool check(int x, int y) {
  int cx, cy;
  cx = cy = 0;
  now += 2;
  for (int i = 0; i < v[x].size() && i < h + t; ++i)
    if (v[x][i] != y) {
      vis[v[x][i]] = now;
      cx++;
    }
  for (int i = 0; i < v[y].size() && cy < t; ++i)
    if (v[y][i] != x) {
      if (vis[v[y][i]] == now) {
        if (cx > h) {
          vis[v[y][i]] = now + 1;
          cy++;
          cx--;
        }
      } else {
        vis[v[y][i]] = now + 1;
        cy++;
      }
    }
  return cx >= h && cy >= t;
}
int main() {
  int n, m, i, j, k;
  int v1, v2;
  bool ok;
  memset(vis, 0, sizeof(vis));
  now = 10;
  scanf("%d %d", &n, &m);
  scanf("%d %d", &h, &t);
  for (i = 1; i <= m; ++i) {
    scanf("%d %d", &a[i], &b[i]);
    v[a[i]].push_back(b[i]);
    v[b[i]].push_back(a[i]);
  }
  ok = 0;
  for (i = 1; !ok && i <= m; ++i) {
    if (v[a[i]].size() >= h + 1 && v[b[i]].size() >= t + 1) {
      if (check(a[i], b[i])) {
        v1 = a[i], v2 = b[i];
        ok = 1;
      }
    }
    if (!ok && v[a[i]].size() >= t + 1 && v[b[i]].size() >= h + 1) {
      if (check(b[i], a[i])) {
        v1 = b[i], v2 = a[i];
        ok = 1;
      }
    }
  }
  if (ok) {
    puts("YES");
    printf("%d %d\n", v1, v2);
    for (i = j = 0; i < v[v1].size() && j < h; ++i)
      if (v[v1][i] != v2 && vis[v[v1][i]] == now) {
        printf("%d", v[v1][i]);
        j++;
        if (j == h)
          printf("\n");
        else
          printf(" ");
      }
    for (i = j = 0; i < v[v2].size() && j < t; ++i)
      if (v[v2][i] != v1 && vis[v[v2][i]] == now + 1) {
        printf("%d", v[v2][i]);
        j++;
        if (j == t)
          printf("\n");
        else
          printf(" ");
      }
  } else
    puts("NO");
  return 0;
}
