#include <bits/stdc++.h>
using namespace std;
int n, po[300005], tot;
long long x1, x2;
struct info {
  int x, id;
  bool operator<(const info &p) const { return x < p.x; }
} s[300005];
long long cal(int x, int len) { return (long long)(n - x + 1 - len) * s[x].x; }
int qry(int l, int r, int tmp) {
  while (r - l > 1) {
    int len = (r - l + 1) / 3;
    int lx = l + len, rx = r - len;
    if (cal(lx, tmp) < cal(rx, tmp))
      l = lx;
    else
      r = rx;
  }
  if (cal(l, tmp) > cal(r, tmp)) return l;
  return r;
}
int main() {
  int x, num, pos, p1, p2, p;
  long long v1, v2;
  scanf("%d%lld%lld", &n, &x1, &x2);
  for (int i = 1; i <= n; i++) scanf("%d", &x), s[i] = (info){x, i};
  sort(s + 1, s + n + 1);
  for (int i = 1; i <= n; i++) {
    num = x1 / i;
    if (x1 % i) num++;
    pos = lower_bound(s + 1, s + n + 1, (info){num, 0}) - s;
    while (pos <= n && s[pos].x < num) pos++;
    if (pos + i - 1 > n) continue;
    p1 = qry(1, pos - 1, i);
    p2 = qry(pos + i, n, 0);
    v1 = (n - p1 - i + 1) * s[p1].x;
    v2 = (n - p2 + 1) * s[p2].x;
    if (max(v1, v2) < x2) continue;
    tot = 0;
    p = v1 > v2 ? p1 : p2;
    for (int j = n; j >= pos + 1 && j >= p; j--) po[++tot] = j;
    for (int j = pos - 1; j >= p; j--) po[++tot] = j;
    printf("Yes\n");
    printf("%d %d\n", i, tot);
    for (int j = pos; j < pos + i; j++) printf("%d ", s[j].id);
    printf("\n");
    for (int j = 1; j <= tot; j++) printf("%d ", s[po[j]].id);
    printf("\n");
    return 0;
  }
  printf("No\n");
  return 0;
}
