#include <bits/stdc++.h>
using namespace std;
int static_init = []() {
  ios_base::sync_with_stdio(false), cin.tie(0), cout << fixed;
  return 0;
}();
constexpr int N = 3e5;
int32_t n, x[2], c[N + 1], p[N + 1];
int64_t t[N + 2];
bool run(bool sw) {
  for (int k1 = 1; k1 <= n; k1++) {
    int i1 =
        lower_bound(p + 1, p + n + 2 - k1, x[sw],
                    [k1](int i, int x) { return (int64_t)c[i] * k1 < x; }) -
        p;
    int j = i1 + k1;
    if (j <= n && t[j] >= x[!sw]) {
      int i2;
      for (i2 = n; i2 >= j; i2--) {
        if (t[i2] == t[j]) break;
      }
      int k2 = n - i2 + 1;
      if (sw) swap(k1, k2), swap(i1, i2);
      cout << "Yes\n" << k1 << ' ' << k2 << endl;
      for (int i = i1; i < i1 + k1; i++)
        cout << p[i] << (i == i1 + k1 - 1 ? '\n' : ' ');
      for (int i = i2; i < i2 + k2; i++)
        cout << p[i] << (i == i2 + k2 - 1 ? '\n' : ' ');
      return true;
    }
  }
  return false;
}
int main() {
  cin >> n >> x[0] >> x[1];
  for (int i = 1; i <= n; i++) cin >> c[i];
  iota(p + 1, p + n + 1, 1);
  sort(p + 1, p + n + 1, [](int i, int j) { return c[i] < c[j]; });
  for (int i = n; i >= 1; i--) {
    t[i] = max(t[i + 1], (int64_t)c[p[i]] * (n - i + 1));
  }
  if (!run(false) && !run(true)) cout << "No" << endl;
  return 0;
}
