#include <bits/stdc++.h>
using namespace std;
const long long INF = 1e9 + 7;
vector<pair<long long, long long> > ans1, ans2;
long long k1, k2;
long long n;
bool solve(vector<pair<long long, long long> > c, long long x1, long long x2) {
  ans1.clear();
  ans2.clear();
  k1 = k2 = 1;
  for (; k1 <= n; ++k1) {
    auto ind = distance(
        c.begin(),
        lower_bound(c.begin(), c.end(), make_pair((x1 + k1 - 1) / k1, -INF)));
    if (ind + k1 <= n) break;
  }
  if (k1 > n) {
    return 0;
  }
  for (long long i = 1; i <= k1; ++i) {
    ans1.push_back(c.back());
    c.pop_back();
  }
  for (; k2 <= (long long)c.size(); ++k2) {
    auto ind = distance(
        c.begin(),
        lower_bound(c.begin(), c.end(), make_pair((x2 + k2 - 1) / k2, -INF)));
    if (ind + k2 <= (long long)c.size()) break;
  }
  if (k2 > (long long)c.size()) {
    return 0;
  }
  for (long long i = 1; i <= k2; ++i) {
    ans2.push_back(c.back());
    c.pop_back();
  }
  return 1;
}
int32_t main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  long long x1, x2;
  cin >> n >> x1 >> x2;
  vector<pair<long long, long long> > c(n);
  for (long long i = 0; i < n; ++i) {
    cin >> c[i].first;
    c[i].second = i;
  }
  sort(c.begin(), c.end());
  if (solve(c, x1, x2)) {
    cout << "Yes\n";
    cout << k1 << ' ' << k2 << '\n';
    for (auto i : ans1) cout << i.second + 1 << ' ';
    cout << '\n';
    for (auto i : ans2) cout << i.second + 1 << ' ';
    cout << '\n';
  } else if (solve(c, x2, x1)) {
    cout << "Yes\n";
    cout << k2 << ' ' << k1 << '\n';
    for (auto i : ans2) cout << i.second + 1 << ' ';
    cout << '\n';
    for (auto i : ans1) cout << i.second + 1 << ' ';
    cout << '\n';
  } else {
    cout << "No\n";
  }
}
