#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
using namespace std;
template <typename T>
using v = vector<T>;
const long long inf = 4611686018427387903;
void read() {}
template <typename Arg, typename... Args>
void read(Arg& arg, Args&... args) {
  cin >> (arg);
  read(args...);
}
void print() {}
template <typename Arg, typename... Args>
void print(Arg arg, Args... args) {
  cout << (arg) << " ";
  print(args...);
}
void debug() { cout << endl; }
template <typename Arg, typename... Args>
void debug(Arg arg, Args... args) {
  cout << (arg) << " ";
  debug(args...);
}
long long getInt() {
  long long a;
  cin >> a;
  return a;
}
void run() {
  long long n, x1, x2;
  read(n, x1, x2);
  pair<long long, long long> c[n];
  for (long long i = (0); i < (n); i++) {
    long long a;
    cin >> a;
    c[i] = {a, i + 1};
  }
  sort(c, c + n);
  v<pair<long long, long long>> seg1, seg2;
  long long l = 0;
  for (long long l = (0); l < (n); l++) {
    long long v = c[l].first;
    long long d = x1 / v;
    if (d * v < x1) d++;
    if (l + d - 1 >= n)
      continue;
    else
      seg1.push_back({l, l + d - 1});
  }
  for (long long l = (0); l < (n); l++) {
    long long v = c[l].first;
    long long d = x2 / v;
    if (d * v < x2) d++;
    if (l + d - 1 >= n)
      continue;
    else
      seg2.push_back({l, l + d - 1});
  }
  sort(seg1.begin(), seg1.end());
  sort(seg2.begin(), seg2.end());
  long long ans1 = -1, ans2;
  for (long long i = (0); i < (((long long)(seg1).size())); i++) {
    if (seg1.empty() || seg2.empty()) break;
    if (seg1[i].second < seg2.back().first) {
      ans1 = i;
      ans2 = ((long long)(seg2).size()) - 1;
      break;
    }
  }
  for (long long i = (0); i < (((long long)(seg2).size())); i++) {
    if (seg1.empty() || seg2.empty()) break;
    if (seg2[i].second < seg1.back().first) {
      ans1 = ((long long)(seg1).size()) - 1;
      ans2 = i;
      break;
    }
  }
  if (ans1 == -1)
    cout << "No";
  else {
    cout << "Yes";
    cout << endl;
    vector<long long> res1, res2;
    for (long long i = (seg1[ans1].first); i < (seg1[ans1].second + 1); i++)
      res1.push_back(c[i].second);
    for (long long i = (seg2[ans2].first); i < (seg2[ans2].second + 1); i++)
      res2.push_back(c[i].second);
    print(((long long)(res1).size()), ((long long)(res2).size()));
    cout << endl;
    for (long long i : res1) print(i);
    cout << endl;
    for (long long i : res2) print(i);
    cout << endl;
  }
}
int32_t main() {
  srand(time(0));
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  run();
  return 0;
}
