#include <bits/stdc++.h>
using namespace std;
const int MAXN = 3e5;
int n, x1, x2, num;
vector<pair<int, int>> servers;
int main() {
  cin >> n >> x1 >> x2;
  for (int i = 0; i < n; i++) {
    cin >> num;
    servers.push_back({num, i});
  }
  sort(servers.begin(), servers.end());
  for (int t = 0; t < 2; t++) {
    int bestr = -1, bestl = -1;
    for (int i = 1; i < n; i++) {
      if (servers[i].first >= (x1 + (n - i - 1)) / (n - i)) {
        bestr = i;
      }
    }
    for (int i = 0; i < bestr; i++) {
      if (servers[i].first >= (x2 + (bestr - i - 1)) / (bestr - i)) {
        bestl = i;
      }
    }
    if (bestl == -1 || bestr == -1) {
      swap(x1, x2);
      continue;
    }
    cout << "Yes\n";
    vector<int> ans[2];
    for (int i = bestl; i < bestr; i++) {
      ans[0].push_back(servers[i].second + 1);
    }
    for (int i = bestr; i < n; i++) {
      ans[1].push_back(servers[i].second + 1);
    }
    int c = 0;
    if (t == 0) c = 1;
    cout << ans[c].size() << ' ' << ans[1 - c].size() << endl;
    for (int i = 0; i < ans[c].size(); i++) {
      cout << ans[c][i] << ' ';
    }
    cout << endl;
    for (int i = 0; i < ans[1 - c].size(); i++) {
      cout << ans[1 - c][i] << ' ';
    }
    return 0;
  }
  cout << "No\n";
}
