#include <bits/stdc++.h>
using namespace std;
using lli = long long;
using ld = long double;
mt19937 rnd(time(nullptr));
void Check(vector<pair<lli, lli>>& data, lli x1, lli x2, bool flag) {
  lli k1 = 0;
  for (; k1 < data.size(); k1++) {
    if (data[k1].first * (k1 + 1) >= x1) break;
  }
  if (k1 == data.size()) return;
  lli k2 = 0;
  for (; k2 + k1 + 1 < data.size(); k2++) {
    if (data[k2 + k1 + 1].first * (k2 + 1) >= x2) break;
  }
  if (k2 + k1 + 1 == data.size()) return;
  vector<lli> ind1, ind2;
  for (lli i = 0; i <= k1; i++) ind1.push_back(data[i].second);
  sort(ind1.begin(), ind1.end());
  for (lli i = 0; i <= k2; i++) ind2.push_back(data[k1 + i + 1].second);
  sort(ind2.begin(), ind2.end());
  if (flag) {
    cout << "Yes\n";
    cout << k1 + 1 << ' ' << k2 + 1 << '\n';
    for (auto it : ind1) cout << it + 1 << ' ';
    cout << '\n';
    for (auto it : ind2) cout << it + 1 << ' ';
    exit(0);
  } else {
    cout << "Yes\n";
    cout << k2 + 1 << ' ' << k1 + 1 << '\n';
    for (auto it : ind2) cout << it + 1 << ' ';
    cout << '\n';
    for (auto it : ind1) cout << it + 1 << ' ';
    exit(0);
  }
}
inline void Solve() {
  lli n = 0, x1 = 0, x2 = 0;
  cin >> n >> x1 >> x2;
  vector<pair<lli, lli>> data(n);
  for (int i = 0; i < n; i++) {
    cin >> data[i].first;
    data[i].second = i;
  }
  sort(data.rbegin(), data.rend());
  Check(data, x1, x2, true);
  Check(data, x2, x1, false);
  cout << "No";
}
signed main() {
  cout << fixed << setprecision(20);
  Solve();
  return 0;
}
