#include <bits/stdc++.h>
using namespace std;
int vis[100005], tick = 0;
vector<int> G[100005];
int a[200001], b[200005];
int main() {
  int n, m, h, t;
  scanf("%d%d%d%d", &n, &m, &h, &t);
  for (int i = 1; i <= m; ++i) {
    int u, v;
    scanf("%d%d", &u, &v);
    G[u].push_back(v);
    G[v].push_back(u);
    a[i * 2 - 1] = u;
    b[i * 2 - 1] = v;
    a[i * 2] = v;
    b[i * 2] = u;
  }
  for (int i = 1; i <= n; ++i) sort(G[i].begin(), G[i].end());
  bool flag = 0;
  for (int i = 1; i <= 2 * m; ++i) {
    int u = a[i], v = b[i];
    if (G[u].size() - 1 < h || G[v].size() - 1 < t) continue;
    bool done = 0;
    if (G[u].size() > G[v].size()) {
      swap(u, v);
      done = 1;
    }
    int acnt = 0, bcnt = 0, bothcnt = 0;
    for (int j = 0; j < G[u].size(); ++j) {
      if (G[u][j] == v) continue;
      if (binary_search(G[v].begin(), G[v].end(), G[u][j])) {
        bothcnt++;
      } else {
        acnt++;
      }
    }
    bcnt = G[v].size() - 1 - bothcnt;
    if (done) {
      swap(acnt, bcnt);
      swap(u, v);
    }
    if (max(0, h - acnt) + max(0, t - bcnt) > bothcnt) continue;
    tick++;
    for (int j = 0; j < G[u].size(); ++j)
      if (G[u][j] != v) {
        vis[G[u][j]] = tick;
      }
    vector<int> A, B, BOTH;
    tick++;
    for (int j = 0; j < G[v].size(); ++j)
      if (G[v][j] != u) {
        if (vis[G[v][j]] == tick - 1) {
          BOTH.push_back(G[v][j]);
        } else {
          B.push_back(G[v][j]);
        }
        vis[G[v][j]] = tick;
      }
    for (int j = 0; j < G[u].size(); ++j)
      if (G[u][j] != v) {
        if (vis[G[u][j]] != tick) {
          A.push_back(G[u][j]);
        }
      }
    if (max(0, h - (int)A.size()) + max(0, t - (int)B.size()) <=
        (int)BOTH.size()) {
      flag = 1;
      puts("YES");
      printf("%d %d\n", u, v);
      int k = 0;
      while (A.size() < h) A.push_back(BOTH[k++]);
      while (B.size() < t) B.push_back(BOTH[k++]);
      for (int i = 0; i < h; ++i) printf("%d%c", A[i], " \n"[i == h - 1]);
      for (int i = 0; i < t; ++i) printf("%d%c", B[i], " \n"[i == t - 1]);
      break;
    }
  }
  if (!flag) puts("NO");
}
