#include <bits/stdc++.h>
inline int getint() {
  int x = 0, p = 1;
  char c = getchar();
  while (c <= 32) c = getchar();
  if (c == 45) p = -p, c = getchar();
  while (c > 32) x = x * 10 + c - 48, c = getchar();
  return x * p;
}
using namespace std;
const int maxn = 3e5 + 5;
int n, A, B, b[maxn], c[maxn];
pair<int, int> a[maxn];
bool suf[maxn];
bool good(int l, int r, bool ok) {
  if (!suf[r + 1]) return false;
  printf("Yes\n");
  int lll = r - l + 1;
  int rrr = n - 1 - (r + 1) + 1;
  for (int len = 1; len <= rrr; len++) {
    int i = n - 1 - len + 1;
    int x = (B - 1) / len + 1;
    if (b[i] < x) continue;
    if (ok) {
      printf("%d %d\n", lll, len);
      for (int j = l; j <= r; j++) printf("%d ", c[j]);
      printf("\n");
      for (int j = i; j < n; j++) printf("%d ", c[j]);
      printf("\n");
      return true;
    } else {
      printf("%d %d\n", len, lll);
      for (int j = i; j < n; j++) printf("%d ", c[j]);
      printf("\n");
      for (int j = l; j <= r; j++) printf("%d ", c[j]);
      printf("\n");
      return true;
    }
  }
  for (int(i) = 0; (i) < (2e9); (i)++)
    ;
}
int main() {
  n = getint();
  A = getint();
  B = getint();
  for (int(i) = 0; (i) < (n); (i)++) {
    int x = getint();
    a[i] = make_pair(x, i);
  }
  sort(a, a + n);
  for (int(i) = 0; (i) < (n); (i)++) b[i] = a[i].first, c[i] = a[i].second + 1;
  for (int i = n - 1; i >= 0; i--) {
    if (suf[i + 1])
      suf[i] = true;
    else {
      int len = n - 1 - i + 1;
      int x = (B - 1) / len + 1;
      if (b[i] >= x)
        suf[i] = true;
      else
        suf[i] = false;
    }
  }
  for (int i = 1; i <= n; i++) {
    int x = (A - 1) / i + 1;
    int l = lower_bound(b, b + n, x) - b;
    if (l == n) continue;
    if (l + i - 1 >= n) continue;
    int r = l + i - 1;
    if (r < n - 1) {
      if (good(l, r, 1)) return 0;
    }
  }
  swap(A, B);
  for (int i = n - 1; i >= 0; i--) {
    if (suf[i + 1])
      suf[i] = true;
    else {
      int len = n - 1 - i + 1;
      int x = (B - 1) / len + 1;
      if (b[i] >= x)
        suf[i] = true;
      else
        suf[i] = false;
    }
  }
  for (int i = 1; i <= n; i++) {
    int x = (A - 1) / i + 1;
    int l = lower_bound(b, b + n, x) - b;
    if (l == n) continue;
    if (l + i - 1 >= n) continue;
    int r = l + i - 1;
    if (r < n - 1) {
      if (good(l, r, 0)) return 0;
    }
  }
  printf("No\n");
  return 0;
}
