#include <bits/stdc++.h>
struct aaa {
  long long x, y;
} aa[300003];
bool cmp(aaa A, aaa B) { return A.x < B.x; }
long long a[300003], b[300003], a1[300003], t1 = 0, t2 = 0, n;
bool jisuan(long long x, long long y) {
  long long f = -1;
  for (long long i = 1; i <= n; i++) {
    double xx = (double)x / (double)i;
    long long k = (long long)(std::lower_bound(a1 + 1, a1 + n + 1, xx) - a1);
    if (n - k + 1 >= i) {
      for (long long j = n - i + 1; j <= n; j++) a[++t1] = aa[j].y;
      f = i;
      break;
    }
  }
  if (f == -1) return 0;
  long long ff = 0;
  long long n1 = n - f;
  for (long long i = 1; i <= n1; i++) {
    double xx = (double)y / (double)i;
    long long k = (long long)(std::lower_bound(a1 + 1, a1 + n1 + 1, xx) - a1);
    if (n1 - k + 1 >= i) {
      for (long long j = n1 - i + 1; j <= n1; j++) b[++t2] = aa[j].y;
      ff = 1;
      break;
    }
  }
  return ff;
}
int main() {
  long long x, y;
  std::cin >> n >> x >> y;
  for (long long i = 1; i <= n; i++) {
    std::cin >> aa[i].x;
    aa[i].y = i;
  }
  std::sort(aa + 1, aa + 1 + n, cmp);
  for (long long i = 1; i <= n; i++) a1[i] = aa[i].x;
  bool g = jisuan(x, y);
  if (g) {
    std::cout << "Yes\n";
    std::cout << t1 << ' ' << t2 << std::endl;
    for (long long i = 1; i < t1; i++) std::cout << a[i] << ' ';
    std::cout << a[t1] << std::endl;
    for (long long i = 1; i < t2; i++) std::cout << b[i] << ' ';
    std::cout << b[t2] << std::endl;
    return 0;
  }
  t1 = t2 = 0;
  g = jisuan(y, x);
  if (g) {
    std::cout << "Yes\n";
    std::cout << t2 << ' ' << t1 << std::endl;
    for (long long i = 1; i < t2; i++) std::cout << b[i] << ' ';
    std::cout << b[t2] << std::endl;
    for (long long i = 1; i < t1; i++) std::cout << a[i] << ' ';
    std::cout << a[t1] << std::endl;
    return 0;
  }
  std::cout << "No\n";
}
