#include <bits/stdc++.h>
using namespace std;
const int maxn = 3e5 + 7;
int n, x1, x2;
int sum = 0, box = 0, mark = 0;
struct Node {
  int c, pl;
} nd[maxn];
bool cmp(const Node &x, const Node &y) { return x.c < y.c; }
int main() {
  scanf("%d%d%d", &n, &x1, &x2);
  for (int i = 1; i <= n; i++) scanf("%d", &nd[i].c), nd[i].pl = i;
  sort(nd + 1, nd + n + 1, cmp);
  for (int i = n; i >= 1; i--) {
    if (nd[i].c * (n - i + 1) >= x2) {
      mark = i;
      break;
    }
  }
  for (int i = mark - 1; i >= 1; i--) {
    if (nd[i].c * (mark - i) >= x1) {
      printf("Yes\n");
      printf("%d %d\n", mark - i, n - mark + 1);
      for (int j = i; j < mark; j++) printf("%d ", nd[j].pl);
      printf("\n");
      for (int j = mark; j <= n; j++) printf("%d ", nd[j].pl);
      printf("\n");
      return 0;
    }
  }
  for (int i = n; i >= 1; i--) {
    if (nd[i].c * (n - i + 1) >= x1) {
      mark = i;
      break;
    }
  }
  for (int i = mark - 1; i >= 1; i--) {
    if (nd[i].c * (mark - i) >= x2) {
      printf("Yes\n");
      printf("%d %d\n", n - mark + 1, mark - i);
      for (int j = mark; j <= n; j++) printf("%d ", nd[j].pl);
      printf("\n");
      for (int j = i; j < mark; j++) printf("%d ", nd[j].pl);
      printf("\n");
      return 0;
    }
  }
  printf("No\n");
  return 0;
}
