#include <bits/stdc++.h>
using namespace std;
vector<int> adj[100001];
int ep[200000];
vector<int> va(100001), vb(100001), vc(100001);
vector<int>::iterator ia, ib, ic;
int main() {
  ios::sync_with_stdio(0);
  int n, m, h, t;
  cin >> n >> m >> h >> t;
  for (int i = 0; i < m; i++) {
    int a, b;
    cin >> a >> b;
    adj[a].push_back(b);
    adj[b].push_back(a);
    ep[2 * i] = a, ep[2 * i + 1] = b;
  }
  for (int i = 1; i <= n; i++) {
    adj[i].push_back(i);
    sort(adj[i].begin(), adj[i].end());
  }
  for (int i = 0; i < 2 * m; i++) {
    vector<int> *a = &adj[ep[i]], *b = &adj[ep[i ^ 1]];
    if (a->size() - 2 < h || b->size() - 2 < t) continue;
    ic = set_intersection(a->begin(), a->end(), b->begin(), b->end(),
                          vc.begin());
    int nc = ic - vc.begin() - 2;
    ia = set_difference(a->begin(), a->end(), b->begin(), b->end(), va.begin());
    ib = set_difference(b->begin(), b->end(), a->begin(), a->end(), vb.begin());
    if ((ia - va.begin()) + (ib - vb.begin()) + nc < h + t) continue;
    cout << "YES" << endl;
    cout << ep[i] << " " << ep[i ^ 1] << endl;
    int na = 0, nb = 0;
    nc = 0;
    for (; na < h && na < ia - va.begin(); na++) cout << va[na] << " ";
    for (; na < h; nc++) {
      if (vc[nc] == ep[i] || vc[nc] == ep[i ^ 1]) continue;
      cout << vc[nc] << " ";
      na++;
    }
    cout << endl;
    for (; nb < t && nb < ib - vb.begin(); nb++) cout << vb[nb] << " ";
    for (; nb < t; nc++) {
      if (vc[nc] == ep[i] || vc[nc] == ep[i ^ 1]) continue;
      cout << vc[nc] << " ";
      nb++;
    }
    cout << endl;
    return 0;
  }
  cout << "NO" << endl;
  return 0;
}
