#include <bits/stdc++.h>
using namespace std;
struct data {
  int v, idx;
  bool operator<(const data &rhs) const { return v > rhs.v; }
} ds[300010];
int val[300010], n, a, b;
int main() {
  scanf("%d%d%d", &n, &a, &b);
  for (int i = 1; i <= n; i++) scanf("%d", &ds[i].v), ds[i].idx = i;
  sort(ds + 1, ds + n + 1);
  for (int i = 1; i <= n; i++) {
    int k1 = max(1, a / ds[i].v + 1 - (a % ds[i].v == 0));
    if (i <= k1) continue;
    int k2 = max(1, b / ds[i - k1].v + 1 - (b % ds[i - k1].v == 0));
    if (k1 + k2 > i) continue;
    printf("Yes\n%d %d\n", k1, k2);
    for (int j = 0; j < k1; j++) printf("%d ", ds[i - j].idx);
    puts("");
    for (int j = 0; j < k2; j++) printf("%d ", ds[i - k1 - j].idx);
    return 0;
  }
  swap(a, b);
  for (int i = 1; i <= n; i++) {
    int k1 = max(1, a / ds[i].v + 1 - (a % ds[i].v == 0));
    if (i <= k1) continue;
    int k2 = max(1, b / ds[i - k1].v + 1 - (b % ds[i - k1].v == 0));
    if (k1 + k2 > i) continue;
    printf("Yes\n%d %d\n", k2, k1);
    for (int j = 0; j < k2; j++) printf("%d ", ds[i - k1 - j].idx);
    puts("");
    for (int j = 0; j < k1; j++) printf("%d ", ds[i - j].idx);
    return 0;
  }
  puts("No");
  return 0;
}
