#include <bits/stdc++.h>
using namespace std;
void _co() { cout << '\n'; }
template <typename T, typename... Ts>
void _co(const T& value, const Ts&... values) {
  cout << ' ' << value;
  _co(values...);
}
template <typename T, typename... Ts>
void co(const T& value, const Ts&... values) {
  cout << "deb: " << value;
  _co(values...);
}
const long long N = 3e5 + 5;
long long n, S1, S2;
vector<pair<long long, long long> > a;
pair<long long, long long> best[N];
long long ceil(long long X, long long Y) { return (X + Y - 1) / Y; }
tuple<bool, vector<long long>, vector<long long> > solve() {
  vector<long long> v1, v2;
  for (long long i = (0); i <= (a.size() - 1); i++) {
    long long need = ceil(S1, a[i].first);
    if (i + need - 1 >= a.size()) continue;
    if (best[i + need].first < S2) continue;
    for (long long j = (i); j <= (i + need - 1); j++) v1.push_back(a[j].second);
    for (long long j = (best[i + need].second); j <= (n - 1); j++)
      v2.push_back(a[j].second);
    return {true, v1, v2};
  }
  return {false, v1, v2};
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cin >> n >> S1 >> S2;
  for (long long i = (1); i <= (n); i++) {
    long long t;
    cin >> t;
    a.push_back({t, i});
  }
  sort(a.begin(), a.end());
  for (long long i = (n - 1); i >= (0); i--) {
    best[i] = max(best[i], {a[i].first * (n - i), i});
  }
  vector<long long> v1, v2;
  bool ok;
  tie(ok, v1, v2) = solve();
  if (!ok) {
    swap(S1, S2);
    tie(ok, v2, v1) = solve();
  }
  if (ok) {
    cout << "Yes" << '\n';
    cout << v1.size() << ' ' << v2.size() << '\n';
    for (auto it : v1) cout << it << ' ';
    cout << '\n';
    for (auto it : v2) cout << it << ' ';
    cout << '\n';
  } else {
    cout << "No" << '\n';
  }
}
