#include <bits/stdc++.h>
using namespace std;
bool comp(const pair<long double, int>& p1, const pair<long double, int>& p2) {
  return p1.first < p2.first;
}
bool solve(vector<pair<long double, int>> capacity, long long n, long long x1,
           long long x2, int& res_k, int& res_k2, int& res_idx) {
  for (int k = 1; k < n; ++k) {
    long double k1_c = (long double)x1 / (long double)k;
    auto it = lower_bound(capacity.begin(), capacity.end(), make_pair(k1_c, -1),
                          comp);
    if (it == capacity.end()) continue;
    int idx = distance(capacity.begin(), it);
    if (idx + k > n) continue;
    int k2 = n - idx - k;
    if (k2 <= 0) continue;
    long double k2_c = (long double)x2 / (long double)k2;
    if (k2_c > capacity[idx + k].first) continue;
    cout << "Yes" << endl;
    res_k = k;
    res_k2 = k2;
    res_idx = idx;
    if (x1 < x2) {
    } else {
    }
    return true;
  }
  return false;
}
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());
  int res_k;
  int res_k2;
  int res_idx;
  if (solve(capacity, n, x1, x2, res_k, res_k2, res_idx)) {
    cout << res_k << " " << res_k2 << endl;
    for (int i = res_idx; i < res_idx + res_k; ++i) {
      cout << capacity[i].second << " ";
    }
    cout << endl;
    for (int i = res_idx + res_k; i < n; ++i) {
      cout << capacity[i].second << " ";
    }
  } else if (solve(capacity, n, x2, x1, res_k, res_k2, res_idx)) {
    cout << res_k2 << " " << res_k << endl;
    for (int i = res_idx + res_k; i < n; ++i) {
      cout << capacity[i].second << " ";
    }
    cout << endl;
    for (int i = res_idx; i < res_idx + res_k; ++i) {
      cout << capacity[i].second << " ";
    }
  } else {
    cout << "No";
  }
  return 0;
}
