#include <bits/stdc++.h>
using namespace std;
bool debug = true;
int n, x1, x2;
pair<int, int> c[300005];
struct ans {
  vector<int> a1;
  vector<int> a2;
  bool ok;
};
ans solve(int a, int b) {
  ans an;
  float i;
  for (i = 0; i < n; i++) {
    int ii = i;
    if (a / (i + 1) <= c[ii].first) {
      an.a1.push_back(c[ii].second);
      break;
    } else {
      an.a1.push_back(c[ii].second);
    }
  }
  if (i == n) {
    an.ok = false;
    return an;
  }
  float last = i;
  for (i++; i < n; i++) {
    int ii = i;
    if (b / (i - last) <= c[ii].first) {
      an.a2.push_back(c[ii].second);
      break;
    } else {
      an.a2.push_back(c[ii].second);
    }
  }
  if (i == n) {
    an.ok = false;
    return an;
  }
  an.ok = true;
  return an;
}
int main(int argc, char* argv[]) {
  scanf("%d%d%d", &n, &x1, &x2);
  for (int i = 0; i < n; i++) {
    scanf("%d", &c[i].first);
    c[i].second = i;
  }
  sort(c, c + n);
  reverse(c, c + n);
  ans v1 = solve(x1, x2);
  ans v2 = solve(x2, x1);
  if (!v1.ok && !v2.ok) {
    cout << "No";
  } else {
    if (v1.ok) {
      cout << "Yes" << endl << v1.a1.size() << " " << v1.a2.size() << endl;
      for (int i = 0; i < v1.a1.size(); i++) {
        cout << v1.a1[i] + 1 << " ";
      }
      cout << endl;
      for (int i = 0; i < v1.a2.size(); i++) {
        cout << v1.a2[i] + 1 << " ";
      }
    } else {
      cout << "Yes" << endl << v2.a2.size() << " " << v2.a1.size() << endl;
      for (int i = 0; i < v2.a2.size(); i++) {
        cout << v2.a2[i] + 1 << " ";
      }
      cout << endl;
      for (int i = 0; i < v2.a1.size(); i++) {
        cout << v2.a1[i] + 1 << " ";
      }
    }
  }
  return 0;
}
