#include <bits/stdc++.h>
using namespace std;
const double EPS = 1e-9;
pair<double, long long> a[300005];
long long n, x1, x2;
bool can(long long x) {
  if (a[n - x].first - x2 * 1. / x > -EPS) return true;
  return false;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  cin >> n >> x1 >> x2;
  bool swapped = false;
  if (x2 < x1) {
    swap(x1, x2);
    swapped = true;
  }
  for (long long i = long long(0); i < long long(n); i++) {
    cin >> a[i].first;
    a[i].second = i + 1;
  }
  sort(a, a + n);
  long long danger = 1;
  while (!can(danger) && danger < n) danger++;
  long long idx = 0;
  long long left = danger;
  vector<long long> other;
  for (long long i = long long(0); i < long long(n); i++) {
    if (a[i].first - (x2 * 1. / danger) > -EPS && left) {
      left--;
      other.push_back(a[i].second);
    } else {
      a[idx++] = a[i];
    }
  }
  if (danger >= n)
    cout << "No" << '\n';
  else {
    n = idx;
    vector<long long> ans;
    bool can = false;
    for (long long i = long long(1); i < long long(n + 1); i++) {
      auto it =
          lower_bound(a, a + n, pair<double, long long>(x1 * 1. / i, -1)) - a;
      if (it + i <= n) {
        for (long long j = long long(it); j < long long(it + i); j++)
          ans.push_back(a[j].second);
        can = true;
        break;
      }
    }
    if (swapped) swap(other, ans);
    if (can) {
      cout << "Yes" << '\n';
      cout << (long long)(ans).size() << " " << (long long)(other).size()
           << '\n';
      for (long long i = long long(0); i < long long((long long)(ans).size());
           i++)
        cout << ans[i] << " ";
      cout << '\n';
      for (long long i = long long(0); i < long long((long long)(other).size());
           i++)
        cout << other[i] << " ";
      cout << '\n';
    } else
      cout << "No" << '\n';
  }
  return 0;
}
