#include <bits/stdc++.h>
using namespace std;
int n, s[2];
vector<pair<int, int> > units;
vector<pair<int, int> > segments[2];
vector<int> ans[2];
int findSeg(int val, vector<pair<int, int> > &vec) {
  int lf = -1, rg = vec.size();
  while (rg - lf > 1) {
    int mid = (lf + rg) / 2;
    if (vec[mid].first >= val)
      return mid;
    else
      lf = mid;
  }
  return -1;
}
int Main() {
  cin >> n >> s[0] >> s[1];
  for (int i = 0; i < n; ++i) {
    pair<int, int> par;
    int x;
    cin >> par.first;
    par.second = i + 1;
    units.push_back(par);
  }
  sort(units.begin(), units.end());
  for (int i = 0; i < n; ++i) {
    for (int id = 0; id < 2; ++id) {
      int count = (s[id] - 1) / units[i].first + 1;
      if (i + count - 1 < n) segments[id].push_back(make_pair(i, i + count));
    }
  }
  bool yes = false;
  if (segments[0].size() > 0 && segments[1].size() > 0) {
    for (int id = 0; id < 2; ++id) {
      for (vector<pair<int, int> >::iterator iter = segments[id].begin();
           iter != segments[id].end(); ++iter) {
        int index = findSeg(iter->second, segments[1 - id]);
        if (index != -1) {
          yes = true;
          for (int i = iter->first; i < iter->second; ++i)
            ans[id].push_back(units[i].second);
          for (int i = segments[1 - id][index].first;
               i < segments[1 - id][index].second; ++i)
            ans[1 - id].push_back(units[i].second);
          break;
        }
      }
      if (yes) break;
    }
  }
  if (yes) {
    cout << "Yes" << endl;
    cout << ans[0].size() << " " << ans[1].size() << endl;
    for (int id = 0; id < 2; ++id) {
      for (int i = 0; i < ans[id].size(); ++i)
        cout << ans[id][i] << " \n"[i == ans[id].size() - 1];
    }
  } else {
    cout << "No" << endl;
  }
  return 0;
}
int main() { return Main(); }
