#include <bits/stdc++.h>
using namespace std;
char CRTBUFF[30000];
struct debugger {
  static void call(const char *it) {}
  template <typename T, typename... aT>
  static void call(const char *it, T a, aT... rest) {
    string b;
    for (; *it && *it != ','; ++it)
      if (*it != ' ') b += *it;
    cerr << b << "=" << a << " ";
    call(++it, rest...);
  }
};
struct serv {
  long long cap;
  int id;
  bool operator<(const serv &s) const { return cap < s.cap; }
} SV[300300];
void print(const vector<int> &v1, const vector<int> &v2) {
  cout << "Yes\n";
  cout << v1.size() << " " << v2.size() << "\n";
  for (int j = (0); j < (v1.size()); j += (1)) cout << v1[j] << " ";
  cout << "\n";
  for (int j = (0); j < (v2.size()); j += (1)) cout << v2[j] << " ";
}
int main() {
  {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
  };
  long long n, x1, x2;
  cin >> n >> x1 >> x2;
  vector<int> v[2];
  for (int i = (0); i < (n); i += (1)) {
    cin >> SV[i].cap;
    SV[i].id = i + 1;
  }
  sort(SV, SV + n);
  for (int i = (0); i < (n); i += (1)) {
    long long p1, p2;
    p1 = (x1 - 1) / SV[i].cap + 1;
    if (i + p1 < n) {
      p2 = (x2 - 1) / SV[i + p1].cap + 1;
      if (p1 + p2 + i <= n) {
        for (int j = (i); j < (i + p1); j += (1)) v[0].push_back(SV[j].id);
        for (int j = (i + p1); j < (i + p1 + p2); j += (1))
          v[1].push_back(SV[j].id);
        print(v[0], v[1]);
        return 0;
      }
    }
    p1 = (x2 - 1) / SV[i].cap + 1;
    if (i + p1 < n) {
      p2 = (x1 - 1) / SV[i + p1].cap + 1;
      if (p1 + p2 + i <= n) {
        for (int j = (i); j < (i + p1); j += (1)) v[1].push_back(SV[j].id);
        for (int j = (i + p1); j < (i + p1 + p2); j += (1))
          v[0].push_back(SV[j].id);
        print(v[0], v[1]);
        return 0;
      }
    }
  }
  cout << "No\n";
}
