#include <bits/stdc++.h>
using namespace std;
template <typename T>
void read(T &ans) {
  T f = 1;
  char c = getchar();
  ans = 0;
  while (!isdigit(c)) {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (isdigit(c)) {
    ans = ans * 10 + c - '0';
    c = getchar();
  }
  ans *= f;
}
const long long maxn = 3e5 + 5, inf = 1e15;
struct server {
  long long c, ord;
  inline bool operator<(const server &rhs) const { return c < rhs.c; }
} s[maxn];
long long x1, x2, cnt1[maxn], cnt2[maxn], p1, p2, n;
inline long long divis(long long a, long long b) {
  if (a % b == 0)
    return a / b;
  else
    return a / b + 1;
}
signed main() {
  read(n), read(x1), read(x2);
  for (long long i = 1; i <= n; i++) {
    read(s[i].c);
    s[i].ord = i;
  }
  sort(s + 1, s + n + 1);
  memset(cnt1, 0x3f, sizeof cnt1);
  memset(cnt2, 0x3f, sizeof cnt2);
  for (long long i = 1; i <= n; i++) {
    cnt1[i] = divis(x1, s[i].c);
    cnt2[i] = divis(x2, s[i].c);
  }
  p1 = p2 = inf;
  for (long long i = 1; i <= n; i++) {
    if (i + cnt1[i] <= n && cnt1[i] + cnt2[i + cnt1[i]] + i - 1 <= n) {
      p1 = i, p2 = i + cnt1[i];
      break;
    }
    if (i + cnt2[i] <= n && cnt2[i] + cnt1[i + cnt2[i]] + i - 1 <= n) {
      p1 = i + cnt2[i], p2 = i;
      break;
    }
  }
  if (p1 == inf) {
    puts("No");
  } else {
    puts("Yes");
    printf("%lld %lld\n", cnt1[p1], cnt2[p2]);
    for (long long i = p1; i < p1 + cnt1[p1]; i++) {
      printf("%lld ", s[i].ord);
    }
    puts("");
    for (long long i = p2; i < p2 + cnt2[p2]; i++) {
      printf("%lld ", s[i].ord);
    }
    puts("");
  }
  return 0;
}
