#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100000;
vector<vector<int> > G;
vector<int> ans1, ans2, common;
bool pushed[MAXN + 5];
int H, T;
int n, m;
int totcom;
int ret1, ret2;
int count(int i1, int i2, int sz, int maxi, bool toFill, vector<int>& ans) {
  int c, c2;
  int ret = 0;
  int i = 0;
  for (c = 0; c < G[i1].size(); c++) {
    if (G[i1][c] == i2) continue;
    while (i < G[i2].size() && G[i2][i] < G[i1][c]) i++;
    if (i == G[i2].size() || G[i2][i] != G[i1][c]) {
      ret++;
      if (toFill) ans.push_back(G[i1][c]);
      if (ret >= sz) break;
    } else {
      if (!pushed[G[i1][c]]) {
        totcom++;
        common.push_back(G[i1][c]);
        pushed[G[i1][c]] = 1;
      }
      if (ret + totcom >= maxi) break;
    }
  }
  return ret;
}
bool check(int i1, int i2) {
  totcom = 0;
  int v1 = count(i1, i2, H, H + T, 0, ans1);
  int v2 = count(i2, i1, T, H + T, 0, ans2);
  ret1 = v1;
  ret2 = v2;
  if (ret1 + ret2 + totcom < H + T) {
    for (int c = 0; c < common.size(); c++) pushed[common[c]] = 0;
    common.clear();
    return 0;
  }
  count(i1, i2, H, H + T, 1, ans1);
  count(i2, i1, T, H + T, 1, ans2);
  for (int c = 0; c < n; c++) {
    if (!pushed[c]) continue;
    if (ans1.size() < H) {
      ans1.push_back(c);
      continue;
    }
    if (ans2.size() < T) {
      ans2.push_back(c);
      continue;
    }
    break;
  }
  return 1;
}
int main() {
  int c, c2;
  scanf("%d%d%d%d", &n, &m, &H, &T);
  G.resize(n);
  for (c = 0; c < m; c++) {
    int t1, t2;
    scanf("%d%d", &t1, &t2);
    t1--;
    t2--;
    G[t1].push_back(t2);
    G[t2].push_back(t1);
  }
  for (c = 0; c < n; c++) sort(G[c].begin(), G[c].end());
  for (c = n - 1; c >= 0; c--)
    for (c2 = 0; c2 < G[c].size(); c2++) {
      bool f = check(c, G[c][c2]);
      if (f) goto yesso;
    }
  printf("NO\n");
  goto ending;
yesso:
  printf("YES\n");
  printf("%d %d\n", c + 1, G[c][c2] + 1);
  for (c = 0; c < ans1.size(); c++) {
    if (c) printf(" ");
    printf("%d", ans1[c] + 1);
  }
  printf("\n");
  for (c = 0; c < ans2.size(); c++) {
    if (c) printf(" ");
    printf("%d", ans2[c] + 1);
  }
  printf("\n");
ending:
  return 0;
}
