#include <bits/stdc++.h>
using namespace std;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  int n, x1, x2;
  cin >> n >> x1 >> x2;
  vector<int> c(n), indices(n);
  for (int i = 0; i < n; ++i) {
    indices[i] = i;
    cin >> c[i];
  }
  sort(indices.begin(), indices.end(),
       [&](int i1, int i2) { return c[i1] < c[i2]; });
  sort(c.begin(), c.end());
  int lo = 1, hi = n;
  while (lo <= hi) {
    int k1 = (lo + hi) / 2;
    double load1 = double(x1) / k1;
    int pos = distance(c.begin(), lower_bound(c.begin(), c.end(), load1));
    if (n - pos >= k1) {
      int k2 = 1, j;
      bool ok = false;
      for (j = n - 1; j >= pos + k1; --j, ++k2) {
        double load2 = double(x2) / k2;
        if (load2 <= c[j]) {
          ok = true;
          break;
        }
      }
      if (!ok && pos > 0) {
        for (j = pos - 1; j >= 0; --j, ++k2) {
          double load2 = double(x2) / k2;
          if (load2 <= c[j]) {
            ok = true;
            break;
          }
        }
      }
      if (ok) {
        cout << "Yes" << endl;
        cout << k1 << " " << k2 << endl;
        for (int i = pos; i < pos + k1; ++i) {
          cout << indices[i] + 1 << " ";
        }
        cout << endl;
        for (int i = max(j, pos + k1); i < n; ++i) {
          cout << indices[i] + 1 << " ";
        }
        for (int i = j; i < pos; ++i) {
          cout << indices[i] + 1 << " ";
        }
        cout << endl;
        return 0;
      } else {
        hi = k1 - 1;
      }
    } else {
      lo = k1 + 1;
    }
  }
  cout << "No" << endl;
  return 0;
}
