#include <bits/stdc++.h>
using namespace std;
vector<vector<int> > g;
vector<pair<int, int> > ho;
int n, m, hd, tl;
bool check(int hi, int ti) {
  int ch = 0, ct = 0, cc = 0;
  int sz1 = g[hi].size(), sz2 = g[ti].size();
  int id1 = 0, id2 = 0;
  for (; id1 < sz1 && id2 < sz2;) {
    if (g[hi][id1] < g[ti][id2]) {
      if (g[hi][id1] != ti) ch++;
      id1++;
    } else if (g[hi][id1] > g[ti][id2]) {
      if (g[ti][id2] != hi) ct++;
      id2++;
    } else
      cc++, id1++, id2++;
  }
  if (id1 != sz1) ch += sz1 - id1 - (ti >= g[hi][id1]);
  if (id2 != sz2) ct += sz2 - id2 - (hi >= g[ti][id2]);
  if (ct + ch + cc >= hd + tl && ch + cc >= hd && ct + cc >= tl) return 1;
  return 0;
}
void Print(int hi, int ti) {
  vector<int> ch, ct, cc;
  int sz1 = g[hi].size(), sz2 = g[ti].size();
  int id1 = 0, id2 = 0;
  for (; id1 < sz1 && id2 < sz2;) {
    if (g[hi][id1] < g[ti][id2]) {
      if (g[hi][id1] != ti) ch.push_back(g[hi][id1]);
      id1++;
    } else if (g[hi][id1] > g[ti][id2]) {
      if (g[ti][id2] != hi) ct.push_back(g[ti][id2]);
      id2++;
    } else {
      cc.push_back(g[ti][id2]);
      id1++;
      id2++;
    }
  }
  if (id1 != sz1) {
    while (id1 < sz1) {
      if (g[hi][id1] != ti) ch.push_back(g[hi][id1]);
      id1++;
    }
  }
  if (id2 != sz2) {
    while (id2 < sz2) {
      if (g[ti][id2] != hi) ct.push_back(g[ti][id2]);
      id2++;
    }
  }
  while (ch.size() < hd) {
    ch.push_back(cc[cc.size() - 1]);
    cc.pop_back();
  }
  while (ct.size() < tl) {
    ct.push_back(cc[cc.size() - 1]);
    cc.pop_back();
  }
  for (int i = 0; i < hd; i++) printf("%d ", ch[i] + 1);
  printf("\n");
  for (int i = 0; i < tl; i++) printf("%d ", ct[i] + 1);
  printf("\n");
}
int main() {
  bool sw = 0;
  scanf("%d%d", &n, &m);
  scanf("%d%d", &hd, &tl);
  if (hd < tl) {
    swap(hd, tl);
    sw = 1;
  }
  g.resize(n);
  for (int i = 0; i < m; i++) {
    int f, t;
    scanf("%d%d", &f, &t);
    f--;
    t--;
    g[f].push_back(t);
    g[t].push_back(f);
  }
  ho.resize(n);
  for (int i = 0; i < n; i++) {
    sort(g[i].begin(), g[i].end());
    ho[i].first = g[i].size();
    ho[i].second = i;
  }
  sort(ho.begin(), ho.end());
  for (int i = ho.size() - 1; i > 0; i--) {
    if (clock() > 1900) break;
    if (ho[i].first <= hd) break;
    int id1 = ho[i].second;
    for (int j = g[id1].size() - 1; j >= 0; j--) {
      if (clock() > 1900) break;
      int id2 = g[id1][j];
      if (g[id2].size() <= tl) continue;
      if (check(id1, id2)) {
        if (sw) {
          swap(hd, tl);
          swap(id1, id2);
        }
        printf("YES\n");
        printf("%d %d\n", id1 + 1, id2 + 1);
        Print(id1, id2);
        return 0;
      }
    }
  }
  printf("NO\n");
  return 0;
}
