#include <bits/stdc++.h>
using namespace std;
bool pair_comp(const pair<long double, int>& p1,
               const pair<long double, int>& p2) {
  return p1.first < p2.first;
}
bool k2_search(const vector<pair<long double, int>>& capacity, long long x2,
               long long k1, long long k2, int idx1) {
  long double min_x2 = (long double)x2 / (long double)k2;
  auto it2 = lower_bound(capacity.begin(), capacity.end(),
                         make_pair(min_x2, -1), pair_comp);
  if (it2 == capacity.end()) return false;
  int idx2 = distance(capacity.begin(), it2);
  if ((int)capacity.size() - idx2 < k2) return false;
  return (int)capacity.size() - min(idx1, idx2) >= k1 + k2;
}
int main() {
  std::ios::sync_with_stdio(false);
  long long n, x1, x2;
  cin >> n >> x1 >> x2;
  vector<pair<long double, int>> capacity(n);
  for (int i = 0; i < n; ++i) {
    cin >> capacity[i].first;
    capacity[i].second = i + 1;
  }
  sort(capacity.begin(), capacity.end(), pair_comp);
  long long res_k1 = -1;
  long long res_k2 = -1;
  for (long long k1 = 1; k1 <= n; ++k1) {
    long double min_x1 = (long double)x1 / (long double)k1;
    auto it1 = lower_bound(capacity.begin(), capacity.end(),
                           make_pair(min_x1, -1), pair_comp);
    if (it1 == capacity.end()) continue;
    int idx1 = distance(capacity.begin(), it1);
    if (n - idx1 < k1) continue;
    long long k2_l = 1;
    long long k2_r = n - k1;
    while (k2_r - k2_l >= 5) {
      long long k2 = k2_l + (k2_r - k2_l) / 2;
      if (k2_search(capacity, x2, k1, k2, idx1)) {
        k2_l = k2;
      } else {
        k2_r = k2;
      }
    }
    for (long long k2 = k2_l; k2 <= k2_r; ++k2) {
      if (k2_search(capacity, x2, k1, k2, idx1)) {
        res_k1 = k1;
        res_k2 = k2;
        break;
      }
    }
    if (res_k1 != -1) break;
  }
  if (res_k1 == -1) {
    cout << "No" << endl;
  } else {
    cout << "Yes" << endl;
    cout << res_k1 << " " << res_k2 << endl;
    long double min_x1 = (long double)x1 / (long double)res_k1;
    auto it1 = lower_bound(capacity.begin(), capacity.end(),
                           make_pair(min_x1, -1), pair_comp);
    long long idx1 = distance(capacity.begin(), it1);
    long double min_x2 = (long double)x2 / (long double)res_k2;
    auto it2 = lower_bound(capacity.begin(), capacity.end(),
                           make_pair(min_x2, -1), pair_comp);
    long long idx2 = distance(capacity.begin(), it2);
    if (idx1 < idx2) {
      for (long long i = idx1; i < idx1 + res_k1; ++i) {
        cout << capacity[i].second << " ";
      }
      cout << endl;
      for (long long i = idx1 + res_k1; i < idx1 + res_k1 + res_k2; ++i) {
        cout << capacity[i].second << " ";
      }
    } else {
      for (long long i = idx2 + res_k2; i < idx2 + res_k2 + res_k1; ++i) {
        cout << capacity[i].second << " ";
      }
      cout << endl;
      for (int i = idx2; i < idx2 + res_k2; ++i) {
        cout << capacity[i].second << " ";
      }
    }
  }
  return 0;
}
