#include <bits/stdc++.h>
using namespace std;
struct Server {
  int c, id;
  friend bool operator<(const Server &a, const Server &b) { return a.c > b.c; }
};
struct Ans {
  int l, r;
  Ans(int _l, int _r) { l = _l, r = _r; }
  Ans() {}
};
int n, _X1, _X2;
Server s[300005];
void read() {
  scanf("%d%d%d", &n, &_X1, &_X2);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &s[i].c);
    s[i].id = i;
  }
}
Ans get_ans(int _X1, int _X2) {
  for (int i = 1; i < n; i++) {
    if (s[i].c * i >= _X1) {
      for (int j = i + 1; j <= n; j++) {
        if (s[j].c * (j - i) >= _X2) {
          return Ans(i, j);
        }
      }
      break;
    }
  }
  return Ans(-1, -1);
}
void work() {
  sort(s + 1, s + 1 + n);
  Ans a = get_ans(_X1, _X2);
  if (a.l != -1) {
    printf("Yes\n");
    printf("%d %d\n", a.l, a.r - a.l);
    for (int i = 1; i <= a.l; i++) printf("%d ", s[i].id);
    printf("\n");
    for (int i = a.l + 1; i <= a.r; i++) printf("%d ", s[i].id);
    printf("\n");
    return;
  }
  a = get_ans(_X2, _X1);
  if (a.l != -1) {
    printf("Yes\n");
    printf("%d %d\n", a.r - a.l, a.l);
    for (int i = a.l + 1; i <= a.r; i++) printf("%d ", s[i].id);
    printf("\n");
    for (int i = 1; i <= a.l; i++) printf("%d ", s[i].id);
    printf("\n");
    return;
  }
  printf("No\n");
}
int main() {
  read();
  work();
}
