#include <bits/stdc++.h>
const static long long INF = 98765432100LL;
static inline void setio(void);
struct bg_data {
  long long val, idx;
  bool operator<(const bg_data& o) const { return val < o.val; }
};
long long n;
std::vector<long long> vec;
std::vector<long long> ids;
std::set<bg_data> stuff;
std::pair<std::vector<long long>, std::vector<long long>> ans;
static std::pair<long long, std::set<bg_data>::iterator> go(
    const long long& k, const long long& x) {
  long long looking_for = (x + k - 1) / k;
  auto it = stuff.lower_bound({looking_for, -1});
  if (it == stuff.end()) return {0, it};
  return {n - it->idx, it};
}
static bool try_way(const long long& x1, const long long& x2) {
  std::set<long long> x1set, x2set;
  for (long long i = 0; i < n; ++i) {
    long long val = (n - i) * vec[ids[i]];
    if (val >= x1) x1set.insert(i);
    if (val >= x2) x2set.insert(i);
  }
  for (long long k1 = 1; k1 < n; ++k1) {
    auto save = go(k1, x1);
    if (save.first < k1) continue;
    long long end = n - save.first + k1;
    auto it = x2set.lower_bound(end);
    if (it == x2set.end()) continue;
    ans.first.clear();
    ans.second.clear();
    ans.first.reserve(k1);
    ans.second.reserve(n - *it - 1);
    for (long long i = n - save.first; i < n - save.first + k1; ++i)
      ans.first.push_back(ids[i] + 1);
    for (long long i = *it; i < n; ++i) ans.second.push_back(ids[i] + 1);
    return true;
  }
  return false;
}
int main(void) {
  setio();
  long long x1, x2;
  std::cin >> n >> x1 >> x2;
  vec.resize(n);
  ids.resize(n);
  for (auto& e : vec) std::cin >> e;
  for (long long i = 0; i < n; ++i) ids[i] = i;
  std::sort(ids.begin(), ids.end(), [](const long long& a, const long long& b) {
    return vec[a] < vec[b];
  });
  for (long long i = 0; i < n; ++i) {
    stuff.insert({vec[ids[i]], i});
    while (i + 1 < n && vec[ids[i]] == vec[ids[i + 1]]) ++i;
  }
  bool good = false;
  if (try_way(x1, x2)) {
    good = true;
  } else if (try_way(x2, x1)) {
    good = true;
    std::swap(ans.first, ans.second);
  }
  if (good) {
    std::cout << "Yes\n"
              << ans.first.size() << " " << ans.second.size() << "\n";
    for (const auto& e : ans.first) std::cout << e << " ";
    std::cout << "\n";
    for (const auto& e : ans.second) std::cout << e << " ";
    std::cout << "\n";
  } else {
    std::cout << "No\n";
  }
  return 0;
}
static inline void setio(void) {
  std::ios::sync_with_stdio(false);
  std::cin.tie(nullptr);
  std::cout.precision(10);
  std::cout << std::fixed;
}
