#include <bits/stdc++.h>
using namespace std;
using namespace std;
int m, h, t, n, i, j, k, ans = 0;
int a[100001], u[3000000], d[100001][30];
vector<int> g[200000];
vector<int> tmp;
void printans(int x, int y) {
  int i, j, n;
  vector<int> ansh, anst;
  for (i = 0; i < g[x].size(); i++) {
    u[g[x][i]] = 1;
  }
  for (j = 0; j < g[y].size(); j++) u[g[y][j]] += 2;
  for (i = 0; i < g[x].size(); i++) {
    if (u[g[x][i]] == 1 && g[x][i] != y) ansh.push_back(g[x][i]);
  }
  for (i = 0; i < g[y].size(); i++) {
    if (u[g[y][i]] == 2 && g[y][i] != x) anst.push_back(g[y][i]);
  }
  for (i = 0; i < g[x].size(); i++) {
    if (u[g[x][i]] == 3 && g[x][i] != y && ansh.size() < h) {
      ansh.push_back(g[x][i]);
      u[g[x][i]] = 0;
    }
  }
  for (i = 0; i < g[y].size(); i++) {
    if (u[g[y][i]] == 3 && g[y][i] != x && anst.size() < t) {
      anst.push_back(g[y][i]);
      u[g[y][i]] = 0;
    }
  }
  cout << "YES\n";
  cout << x << " " << y << endl;
  for (i = 0; i < h; i++) cout << ansh[i] << " ";
  cout << endl;
  for (i = 0; i < t; i++) cout << anst[i] << " ";
  cout << endl;
}
int main() {
  cin >> n >> m >> h >> t;
  for (i = 0; i < m; i++) {
    int x, y;
    cin >> x >> y;
    g[x].push_back(y);
    g[y].push_back(x);
  }
  for (i = 1; i <= n; i++) sort(g[i].begin(), g[i].end());
  int x;
  vector<int> vh;
  for (i = 1; i <= n; i++) {
    if (g[i].size() > h) {
      for (j = 0; j < g[i].size(); j++) {
        x = g[i][j];
        int tol = 0;
        if (g[x].size() > t) {
          int nom = 0;
          for (k = 0; k < g[x].size() && nom < g[i].size(); k++) {
            while (nom < g[i].size() && g[i][nom] < g[x][k]) nom++;
            if (nom < g[i].size() && g[i][nom] == g[x][k] && g[i][nom] != x)
              tol++;
          }
          if (g[i].size() + g[x].size() - tol - 2 >= t + h) {
            printans(i, x);
            return 0;
          }
        }
      }
    }
  }
  cout << "NO\n";
  return 0;
}
