#include <bits/stdc++.h>
using namespace std;
long double pi = 4 * atanl(1.0);
long double eps = 1e-9;
string stringmin = "!";
string stringmax = "~";
double ang1 = pi / 180;
pair<long double, long double> operator-(pair<long double, long double> p1,
                                         pair<long double, long double> p2) {
  return pair<long double, long double>(p1.first - p2.first,
                                        p1.second - p2.second);
}
pair<long double, long double> operator+(pair<long double, long double> p1,
                                         pair<long double, long double> p2) {
  return pair<long double, long double>(p1.first + p2.first,
                                        p1.second + p2.second);
}
long double operator*(pair<long double, long double> p1,
                      pair<long double, long double> p2) {
  return p1.first * p2.first + p1.second * p2.second;
}
pair<long double, long double> operator*(long double c,
                                         pair<long double, long double> p) {
  return pair<long double, long double>(c * p.first, c * p.second);
}
long double operator++(pair<long double, long double> p) {
  return sqrtl(p.first * p.first + p.second * p.second);
}
pair<long long, long long> operator-(pair<long long, long long> &p1,
                                     pair<long long, long long> &p2) {
  return pair<long long, long long>(p1.first - p2.first, p1.second - p2.second);
}
long long operator*(pair<long long, long long> &p1,
                    pair<long long, long long> &p2) {
  return p1.first * p2.first + p1.second * p2.second;
}
int main() {
  cin.sync_with_stdio(0);
  cout.sync_with_stdio(0);
  cin.tie(0);
  long long n, x1, x2;
  cin >> n >> x1 >> x2;
  vector<pair<long long, long long> > v(n);
  for (auto &i1 : v) cin >> i1.first;
  long long cnt = 0;
  for (auto &i1 : v) i1.second = cnt++;
  sort(v.begin(), v.end());
  reverse(v.begin(), v.end());
  {
    long long n1 = 1;
    while (n1 < n && v[n1 - 1].first * n1 < x1) {
      n1++;
    }
    long long n2 = 1;
    while (n2 < n - n1 && v[n1 + n2 - 1].first * n2 < x2) {
      n2++;
    }
    if (n1 != n && v[n1 + n2 - 1].first * n2 >= x2) {
      cout << "Yes" << endl;
      cout << n1 << ' ' << n2 << endl;
      for (long long i = 0; i < n1; i++) cout << v[i].second + 1 << ' ';
      cout << endl;
      for (long long i = n1; i < n1 + n2; i++) cout << v[i].second + 1 << ' ';
      return 0;
    }
  }
  swap(x1, x2);
  {
    long long n1 = 1;
    while (n1 < n && v[n1 - 1].first * n1 < x1) {
      n1++;
    }
    long long n2 = 1;
    while (n2 < n - n1 && v[n1 + n2 - 1].first * n2 < x2) {
      n2++;
    }
    if (n1 != n && v[n1 + n2 - 1].first * n2 >= x2) {
      cout << "Yes" << endl;
      cout << n2 << ' ' << n1 << endl;
      for (long long i = n1; i < n1 + n2; i++) cout << v[i].second + 1 << ' ';
      cout << endl;
      for (long long i = 0; i < n1; i++) cout << v[i].second + 1 << ' ';
      return 0;
    }
  }
  cout << "No";
  return 0;
}
