#include <bits/stdc++.h>
using namespace std;
vector<pair<int, int> > servers;
void print(int l1, int r1, int l2, int r2) {
  cout << "Yes" << endl << r1 - l1 + 1 << " " << r2 - l2 + 1 << endl;
  for (int(i) = (l1); (i) < (r1 + 1); ++(i)) cout << servers[i].second << " ";
  cout << endl;
  for (int(i) = (l2); (i) < (r2 + 1); ++(i)) cout << servers[i].second << " ";
  cout << endl;
}
int main() {
  int n, x1, x2;
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> x1 >> x2;
  vector<pair<int, int> > s1, s2;
  servers.resize(n);
  for (int(i) = (0); (i) < (n); ++(i)) {
    servers[i].second = i + 1;
    cin >> servers[i].first;
  }
  sort(servers.begin(), servers.end());
  for (int(i) = (0); (i) < (n); ++(i)) {
    int bound = servers[i].first;
    int end1 =
        x1 / servers[i].first + i - 1 + ((x1 % servers[i].first > 0) ? 1 : 0);
    int end2 =
        x2 / servers[i].first + i - 1 + ((x2 % servers[i].first > 0) ? 1 : 0);
    if (end1 < n) s1.push_back({i, end1});
    if (end2 < n) s2.push_back({i, end2});
  }
  for (const pair<int, int>& p : s1) {
    int idx =
        lower_bound(s2.begin(), s2.end(), pair<int, int>(p.second + 1, -1)) -
        s2.begin();
    if (idx >= 0 && idx < (int)s2.size()) {
      print(p.first, p.second, s2[idx].first, s2[idx].second);
      return 0;
    }
  }
  for (const pair<int, int>& p : s2) {
    int idx =
        lower_bound(s1.begin(), s1.end(), pair<int, int>(p.second + 1, -1)) -
        s1.begin();
    if (idx >= 0 && idx < (int)s1.size()) {
      print(s1[idx].first, s1[idx].second, p.first, p.second);
      return 0;
    }
  }
  cout << "No" << endl;
  return 0;
}
