#include <bits/stdc++.h>
using namespace std;
const int MN = 1e5 + 44;
vector<int> graf[MN];
pair<int, int> e[MN];
int main() {
  int n, m, h, t;
  scanf("%d%d%d%d", &n, &m, &h, &t);
  for (int i = 0; i < m; ++i) {
    int a, b;
    scanf("%d%d", &a, &b);
    graf[a].push_back(b);
    graf[b].push_back(a);
    e[i] = make_pair(a, b);
  }
  for (int i = 1; i <= n; ++i) sort(graf[i].begin(), graf[i].end());
  for (int i = 0; i < m; ++i) {
    int a = e[i].first;
    int b = e[i].second;
    for (int k = 0; k < 2; ++k) {
      if (graf[a].size() > h && graf[b].size() > t) {
        int inter = 0;
        for (int p = 0, q = 0; p < graf[a].size() && q < graf[b].size();) {
          if (graf[a][p] < graf[b][q])
            p++;
          else if (graf[a][p] == graf[b][q]) {
            inter++;
            p++;
            q++;
          } else
            q++;
        }
        if (graf[a].size() + graf[b].size() - inter >= h + t + 2) {
          vector<int> aa, bb, both;
          int p, q;
          for (p = 0, q = 0; p < graf[a].size() && q < graf[b].size();) {
            if (graf[a][p] < graf[b][q]) {
              aa.push_back(graf[a][p]);
              p++;
            } else if (graf[a][p] == graf[b][q]) {
              both.push_back(graf[a][p]);
              p++;
              q++;
            } else {
              bb.push_back(graf[b][q]);
              q++;
            }
          }
          for (int i = p; i < graf[a].size(); ++i) aa.push_back(graf[a][i]);
          for (int i = q; i < graf[b].size(); ++i) bb.push_back(graf[b][i]);
          printf("YES\n");
          printf("%d %d\n", a, b);
          for (int i = 0; i < h; ++i) {
            int x;
            if (aa.size()) {
              x = aa.back();
              aa.pop_back();
            } else {
              x = both.back();
              both.pop_back();
            }
            if (x == a || x == b) {
              i--;
            } else {
              printf("%d ", x);
            }
          }
          printf("\n");
          for (int i = 0; i < t; ++i) {
            int x;
            if (both.size()) {
              x = both.back();
              both.pop_back();
            } else {
              x = bb.back();
              bb.pop_back();
            }
            if (x == a || x == b)
              i--;
            else
              printf("%d ", x);
          }
          return 0;
        }
      }
      swap(a, b);
    }
  }
  printf("NO\n");
}
