#include <bits/stdc++.h>
using namespace std;
const long long linf = 1e18 + 5;
const int mod = (int)1e9 + 7;
const int logN = 17;
const int inf = 1e9;
const int N = 2e5 + 5;
int s, n, m, h1[N], h, t, x, y, z;
vector<int> v[N];
pair<int, int> e[N];
void print(int x, int y) {
  cout << "YES\n";
  vector<int> com, h, t;
  for (__typeof(v[x].begin()) it = v[x].begin(); it != v[x].end(); it++)
    h1[*it]++;
  for (__typeof(v[y].begin()) it = v[y].begin(); it != v[y].end(); it++)
    h1[*it]++;
  for (__typeof(v[x].begin()) it = v[x].begin(); it != v[x].end(); it++) {
    if (*it == y) continue;
    if (h1[*it] == 1 && h.size() < ::h) h.push_back(*it);
    if (h1[*it] == 2) com.push_back(*it);
  }
  for (__typeof(v[y].begin()) it = v[y].begin(); it != v[y].end(); it++) {
    if (*it == x) continue;
    if (h1[*it] == 1 && t.size() < ::t) t.push_back(*it);
  }
  while (h.size() < ::h) {
    h.push_back(com.back());
    com.pop_back();
  }
  while (t.size() < ::t) {
    t.push_back(com.back());
    com.pop_back();
  }
  cout << x << ' ' << y << '\n';
  for (__typeof(h.begin()) it = h.begin(); it != h.end(); it++)
    cout << *it << ' ';
  cout << '\n';
  for (__typeof(t.begin()) it = t.begin(); it != t.end(); it++)
    cout << *it << ' ';
  cout << '\n';
}
int main() {
  scanf("%d %d %d %d", &n, &m, &h, &t);
  int s = 0;
  for (int i = 1; i <= m; i++) {
    scanf("%d %d", &x, &y);
    e[++s] = make_pair(x, y);
    e[++s] = make_pair(y, x);
    v[x].push_back(y);
    v[y].push_back(x);
  }
  for (int i = 1; i <= n; i++) {
    sort(v[i].begin(), v[i].end());
  }
  for (int i = 1; i <= s; i++) {
    x = e[i].first;
    y = e[i].second;
    if (v[x].size() >= h + 1 && v[y].size() >= h + t + 1) {
      print(x, y);
      return 0;
    }
    if (v[x].size() >= h + t + 1 && v[y].size() >= t + 1) {
      print(x, y);
      return 0;
    }
    if (v[x].size() <= h || v[y].size() <= t) continue;
    int j = 0;
    int s1 = v[x].size() - 1, s2 = v[y].size() - 1, com = 0;
    for (int tt = 0; tt <= s1; tt++) {
      while (j < v[y].size() && v[y][j] < v[x][tt]) j++;
      if (j < v[y].size() && v[y][j] == v[x][tt]) com++;
    }
    if (s1 + s2 - com >= h + t) {
      print(x, y);
      return 0;
    }
  }
  cout << "NO\n";
  return 0;
}
