#include <bits/stdc++.h>
const int Inf = 1e9;
long long LINF = (long long)4e18;
const long long mod = 1e9 + 7;
using namespace std;
int main() {
  ios::sync_with_stdio(false);
  int n, x1, x2;
  cin >> n >> x1 >> x2;
  vector<pair<int, int> > c;
  for (int(i) = 0; (i) < n; (i)++) {
    int x;
    cin >> x;
    c.push_back({x, i});
  }
  c.push_back({1e9, 1e9});
  vector<int> ans1, ans2;
  sort((c).begin(), (c).end());
  bool fl = true;
  vector<int> used(n, 0);
  long long sum1 = 0;
  int pos = n - 1;
  int cou = 1;
  while (1) {
    int tmp = (x1 + cou - 1) / cou;
    int ind =
        lower_bound((c).begin(), (c).end(), make_pair(tmp, -1)) - c.begin();
    if (ind > pos) {
      used[pos] = 1;
      ans1.push_back(c[pos].second);
      pos--;
      cou++;
    } else {
      used[ind] = 1;
      ans1.push_back(c[ind].second);
      break;
    }
    if (cou > n - 1) {
      fl = false;
      break;
    }
  }
  cou = 1;
  bool ok = false;
  for (int i = n - 1; i >= 0; i--) {
    if (!used[i]) {
      int tmp = (x2 + cou - 1) / cou;
      if (c[i].first >= tmp) {
        ans2.push_back(c[i].second);
        ok = true;
        break;
      } else {
        cou++;
        ans2.push_back(c[i].second);
      }
    }
  }
  if (!ok) {
    fl = false;
  }
  if (!fl) {
    ans1.clear();
    ans2.clear();
    fl = true;
    vector<int> used(n, 0);
    long long sum1 = 0;
    int pos = n - 1;
    int cou = 1;
    while (1) {
      int tmp = (x2 + cou - 1) / cou;
      int ind =
          lower_bound((c).begin(), (c).end(), make_pair(tmp, -1)) - c.begin();
      if (ind > pos) {
        used[pos] = 1;
        ans2.push_back(c[pos].second);
        pos--;
        cou++;
      } else {
        used[ind] = 1;
        ans2.push_back(c[ind].second);
        break;
      }
      if (cou > n - 1) {
        fl = false;
        break;
      }
    }
    cou = 1;
    bool ok = false;
    for (int i = n - 1; i >= 0; i--) {
      if (!used[i]) {
        int tmp = (x1 + cou - 1) / cou;
        if (c[i].first >= tmp) {
          ans1.push_back(c[i].second);
          ok = true;
          break;
        } else {
          cou++;
          ans1.push_back(c[i].second);
        }
      }
    }
    if (!ok) {
      fl = false;
    }
  }
  if (!fl) {
    cout << "No";
    return 0;
  }
  cout << "Yes\n" << ans1.size() << " " << ans2.size() << endl;
  for (int(i) = 0; (i) < ans1.size(); (i)++) cout << ans1[i] + 1 << " ";
  cout << endl;
  for (int(i) = 0; (i) < ans2.size(); (i)++) cout << ans2[i] + 1 << " ";
  return 0;
}
