#include <bits/stdc++.h>
using namespace std;
const int maxn = 300005;
int n;
long long x1, x2;
struct sss {
  long long val;
  int num;
} a[maxn];
bool cmp(const sss &a, const sss &b) { return a.val > b.val; }
void scanff() {
  scanf("%d%I64d%I64d", &n, &x1, &x2);
  for (int i = 1; i <= n; i++) {
    scanf("%I64d", &a[i].val);
    a[i].num = i;
  }
  sort(a + 1, a + n + 1, cmp);
}
void work() {
  int now1, now2;
  bool flag = false;
  if (x1 < x2) {
    swap(x1, x2);
    flag = true;
  }
  for (now1 = 1; now1 <= n; now1++) {
    if (a[now1].val * now1 >= x1) break;
  }
  if (now1 > n) {
    printf("No\n");
    return;
  }
  for (now2 = now1 + 1; now2 <= n; now2++) {
    if (a[now2].val * (now2 - now1) >= x2) break;
  }
  if (now2 > n) {
    int head = 1, tail = now1;
    for (;;) {
      if (tail + 1 <= n) {
        if (a[tail + 1].val * (tail - head + 1) >= x1) {
          tail++;
          head++;
          if (a[head - 1].val * (head - 1) >= x2) {
            printf("Yes\n");
            if (!flag) {
              printf("%d %d\n", tail - head + 1, head - 1);
              for (int i = head; i <= tail; i++) {
                printf("%d ", a[i].num);
              }
              printf("\n");
              for (int i = 1; i <= head - 1; i++) {
                printf("%d ", a[i].num);
              }
              return;
            } else {
              printf("%d %d\n", head - 1, tail - head + 1);
              for (int i = 1; i <= head - 1; i++) {
                printf("%d ", a[i].num);
              }
              printf("\n");
              for (int i = head; i <= tail; i++) {
                printf("%d ", a[i].num);
              }
              return;
            }
          }
        } else {
          tail++;
        }
      } else
        break;
    }
    printf("No\n");
    return;
  }
  printf("Yes\n");
  if (!flag) {
    printf("%d %d\n", now1, now2 - now1);
    for (int i = 1; i <= now1; i++) {
      printf("%d ", a[i].num);
    }
    printf("\n");
    for (int i = now1 + 1; i <= now2; i++) {
      printf("%d ", a[i].num);
    }
  } else {
    printf("%d %d\n", now2 - now1, now1);
    for (int i = now1 + 1; i <= now2; i++) {
      printf("%d ", a[i].num);
    }
    printf("\n");
    for (int i = 1; i <= now1; i++) {
      printf("%d ", a[i].num);
    }
  }
}
int main() {
  scanff();
  work();
  return 0;
}
