#include <bits/stdc++.h>
using namespace std;
template <typename T, typename U>
inline bool smax(T& x, const U& y) {
  return y > x ? (x = y, 1) : 0;
}
template <typename T, typename U>
inline bool smin(T& x, const U& y) {
  return y < x ? (x = y, 1) : 0;
}
inline int read() {
  int w = 0, p = 0;
  char c;
  while (!isdigit(c = getchar()))
    if (c == '-') p = 1;
  while (isdigit(c)) w = (w << 1) + (w << 3) + (c ^ '0'), c = getchar();
  return p ? -w : w;
}
const int N = 3e5 + 7;
int n, x1, x2;
pair<int, int> c[N];
bool f = 0;
int p[N], cnt;
void out(int a, int b, int c, int d) {
  if (f) swap(a, c), swap(b, d);
  printf("Yes\n%d %d\n", b - a + 1, d - c + 1);
  cnt = 0;
  for (int i = (a); i <= (b); ++i) p[++cnt] = ::c[i].second;
  sort(p + 1, p + 1 + cnt);
  for (int i = (1); i <= (cnt); ++i) printf("%d ", p[i]);
  puts("");
  cnt = 0;
  for (int i = (c); i <= (d); ++i) p[++cnt] = ::c[i].second;
  sort(p + 1, p + 1 + cnt);
  for (int i = (1); i <= (cnt); ++i) printf("%d ", p[i]);
  puts("");
}
int rr = 0;
int num[N], siz, ss;
pair<int, int> qa[N];
inline int ask(int p) {
  if (!p) return 0;
  if (p <= siz) {
    for (int i = (1); i <= (p); ++i) {
      if (num[i] <= p) return i;
    }
    return 0;
  }
  int be = ((p - 1) / siz + 1) - 1;
  for (int i = (1); i <= (be); ++i) {
    int t =
        upper_bound(qa + ((i - 1) * siz + 1), qa + (i == ss ? n : i * siz) + 1,
                    make_pair(p, 0x3f3f3f3f)) -
        qa - 1;
    if (t >= ((i - 1) * siz + 1)) return qa[t].second;
  }
  ++be;
  for (int i = (((be - 1) * siz + 1)); i <= (p); ++i)
    if (num[i] <= p) return i;
  return 0;
}
void check(int x) {
  int t1 = ceil(1.0 * x1 / x);
  int p = lower_bound(c + 1, c + 1 + n, make_pair(t1, 0)) - c;
  if (n - p + 1 < x) return;
  if (p + x <= rr) out(p, p + x - 1, rr, n), exit(0);
  int t = ask(p - 1);
  if (t) out(p, p + x - 1, t, num[t]), exit(0);
}
int main() {
  n = read(), x1 = read(), x2 = read();
  if (x1 > x2) f = 1, swap(x1, x2);
  for (int i = (1); i <= (n); ++i) c[i] = make_pair(read(), i);
  sort(c + 1, c + 1 + n);
  for (int i = (n); i >= (1); --i) {
    int x = ceil(1.0 * x2 / (n - i + 1));
    if (c[i].first >= x) {
      rr = i;
      break;
    }
  }
  for (int i = (1); i <= (n); ++i)
    num[i] = (x2 - 1) / c[i].first + i, qa[i] = make_pair(num[i], i);
  siz = sqrt(n / log2(n));
  ss = ((n - 1) / siz + 1);
  for (int i = (1); i <= (ss); ++i)
    sort(qa + ((i - 1) * siz + 1), qa + (i == ss ? n : i * siz) + 1);
  if (!rr) return puts("No"), 0;
  for (int i = (1); i <= (n); ++i) check(i);
  puts("No");
  return 0;
}
