#include <bits/stdc++.h>
using namespace std;
struct Node {
  int c, id;
};
const int N = 3e5 + 10;
Node a[N];
bool cmp(const Node& p, const Node& q) { return p.c < q.c; }
int main() {
  int n, c, x1, x2, minx1, minx2, p1, p2, d;
  long long sum;
  scanf("%d %d %d", &n, &x1, &x2);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &c);
    a[i].c = c;
    a[i].id = i;
  }
  sort(a + 1, a + n + 1, cmp);
  minx1 = 0;
  minx2 = 0;
  for (int i = n; i >= 1; i--) {
    if (x1 <= 1LL * a[i].c * (n - i + 1)) {
      minx1 = i;
      break;
    }
  }
  for (int i = n; i >= 1; i--) {
    if (x2 <= 1LL * a[i].c * (n - i + 1)) {
      minx2 = i;
      break;
    }
  }
  if (!minx1 && !minx2) {
    printf("No\n");
    return 0;
  }
  for (int i = 1; i <= n - 1; i++) {
    d = lower_bound(a + 1, a + n + 1, (Node){(x1 - 1) / i + 1, 0}, cmp) - a;
    if (minx2 >= d + i) {
      printf("Yes\n");
      printf("%d %d\n", i, n - minx2 + 1);
      for (int j = d; j <= d + i - 1; j++) printf("%d ", a[j].id);
      printf("\n");
      for (int j = n; j >= minx2; j--) printf("%d ", a[j].id);
      printf("\n");
      return 0;
    }
  }
  for (int i = 1; i <= n - 1; i++) {
    d = lower_bound(a + 1, a + n + 1, (Node){(x2 - 1) / i + 1, 0}, cmp) - a;
    if (minx1 >= d + i) {
      printf("Yes\n");
      printf("%d %d\n", n - minx1 + 1, i);
      for (int j = n; j >= minx1; j--) printf("%d ", a[j].id);
      printf("\n");
      for (int j = d; j <= d + i - 1; j++) printf("%d ", a[j].id);
      printf("\n");
      return 0;
    }
  }
  printf("No\n");
  return 0;
}
