#include <bits/stdc++.h>
using namespace std;
bool Search(const vector<int> &c, const vector<int> &indices, int n, int x1,
            int x2, bool rev) {
  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) {
        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;
        if (!rev) {
          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;
        } else {
          cout << k2 << " " << k1 << 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;
          for (int i = pos; i < pos + k1; ++i) {
            cout << indices[i] + 1 << " ";
          }
          cout << endl;
        }
        return true;
        ;
      } else {
        hi = k1 - 1;
      }
    } else {
      if (pos < n && double(x1) / (n - pos) <= c[pos]) {
        hi = k1 - 1;
      } else {
        lo = k1 + 1;
      }
    }
  }
  return false;
}
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());
  if (!Search(c, indices, n, x1, x2, false) &&
      !Search(c, indices, n, x2, x1, true)) {
    cout << "No" << endl;
  }
  return 0;
}
