#include <bits/stdc++.h>
using namespace std;
struct s {
  long long id, v;
  bool operator<(const s &aa) const { return v < aa.v; }
} a[100005];
int main() {
  long long n, x1, x2;
  scanf("%I64d %I64d %I64d", &n, &x1, &x2);
  for (long long i = 1; i <= n; ++i) {
    a[i].id = i;
    scanf("%I64d", &a[i].v);
  }
  sort(a + 1, a + 1 + n);
  long long zt = 1, l, r, ll, rr;
  for (long long i = 1; i <= n; ++i) {
    if (x1 <= a[i].v * i) {
      for (long long j = i + 1; j <= n; ++j) {
        if (x2 <= a[j].v * (j - i)) {
          zt = 0;
          l = 1;
          r = i;
          ll = i + 1;
          rr = j;
          break;
        }
      }
    }
    if (!zt) break;
  }
  if (zt) {
    for (long long i = 1; i <= n; ++i) {
      if (x2 <= a[i].v * i) {
        for (long long j = i + 1; j <= n; ++j) {
          if (x1 <= a[j].v * (j - i)) {
            zt = 0;
            l = i + 1;
            r = j;
            ll = 1;
            rr = i;
            break;
          }
        }
      }
      if (!zt) break;
    }
  }
  if (zt)
    printf("No\n");
  else {
    printf("Yes\n");
    printf("%I64d %I64d\n", r - l + 1, rr - ll + 1);
    for (long long i = l; i <= r; ++i)
      printf("%I64d%c", a[i].id, i == r ? '\n' : ' ');
    for (long long i = ll; i <= rr; ++i)
      printf("%I64d%c", a[i].id, i == rr ? '\n' : ' ');
  }
}
