#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9;
const long long INF64 = 1e18;
const int MOD = INF + 7;
const double EPS = 1e-9;
int main() {
  ios_base::sync_with_stdio(false);
  long long n, x1, x2;
  cin >> n >> x1 >> x2;
  vector<pair<long long, long long> > c(n);
  for (int i = 0; i < n; i++) {
    cin >> c[i].first;
    c[i].second = i;
  }
  sort(c.begin(), c.end());
  bool f = 0;
  vector<int> ans1, ans2;
  int l = n - 1;
  ans1.push_back(c[n - 1].second);
  while (l > 0 && ans1.size() * c[l].first < x1) {
    l--;
    ans1.push_back(c[l].second);
  }
  if (l == 0) {
    f = 1;
  }
  while (f == 0 && l > 0 && ans2.size() * c[l].first < x2) {
    l--;
    ans2.push_back(c[l].second);
  }
  if (ans2.size() * c[l].first < x2) {
    f = 1;
  }
  if (f == 0) {
    cout << "Yes" << '\n' << ans1.size() << ' ' << ans2.size() << '\n';
    for (int i = 0; i < ans1.size(); i++) cout << ans1[i] + 1 << ' ';
    cout << '\n';
    for (int i = 0; i < ans2.size(); i++) cout << ans2[i] + 1 << ' ';
  } else {
    swap(x1, x2);
    vector<int> ans1, ans2;
    int l = n - 1;
    ans1.push_back(c[n - 1].second);
    while (l > 0 && ans1.size() * c[l].first < x1) {
      l--;
      ans1.push_back(c[l].second);
    }
    if (l == 0) {
      cout << "No";
      return 0;
    }
    while (l > 0 && ans2.size() * c[l].first < x2) {
      l--;
      ans2.push_back(c[l].second);
    }
    if (ans2.size() * c[l].first < x2) {
      cout << "No";
      return 0;
    }
    cout << "Yes" << '\n' << ans2.size() << ' ' << ans1.size() << '\n';
    for (int i = 0; i < ans2.size(); i++) cout << ans2[i] + 1 << ' ';
    cout << '\n';
    for (int i = 0; i < ans1.size(); i++) cout << ans1[i] + 1 << ' ';
  }
  return 0;
}
