#include <bits/stdc++.h>
using namespace std;
int a[300005], b[300005], c[300005], id[300005], n;
void solve1() {
  for (int i = n - 1; i > 0; i--) {
    int p = lower_bound(c + 1, c + n + 1, a[i]) - c, ps = p + i - 1;
    if (ps < n && b[n - ps] <= c[ps + 1]) {
      puts("Yes");
      printf("%d %d\n", i, n - ps);
      for (int i = p; i <= ps; i++) {
        printf("%d ", id[i]);
      }
      puts("");
      for (int i = ps + 1; i <= n; i++) {
        printf("%d ", id[i]);
      }
      exit(0);
    }
  }
}
void solve2() {
  for (int i = n - 1; i > 0; i--) {
    int p = lower_bound(c + 1, c + n + 1, b[i]) - c, ps = p + i - 1;
    if (ps < n && a[n - ps] <= c[ps + 1]) {
      puts("Yes");
      printf("%d %d\n", n - ps, i);
      for (int i = ps + 1; i <= n; i++) {
        printf("%d ", id[i]);
      }
      puts("");
      for (int i = p; i <= ps; i++) {
        printf("%d ", id[i]);
      }
      exit(0);
    }
  }
}
bool cmp(const int &A, const int &B) { return c[A] < c[B]; }
int main() {
  int x1, x2;
  scanf("%d%d%d", &n, &x1, &x2);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &c[i]), id[i] = i;
  }
  sort(id + 1, id + n + 1, cmp);
  sort(c + 1, c + n + 1);
  for (int i = 1; i <= n; i++) {
    a[i] = x1 / i + (x1 % i > 0), b[i] = x2 / i + (x2 % i > 0);
  }
  solve1();
  solve2();
  puts("No");
  return 0;
}
