#include <bits/stdc++.h>
using namespace std;
long long n, cost1, cost2;
struct node {
  long long value, location;
};
vector<node> my_list;
bool func1(int k) {
  int cnt1, cnt2;
  for (cnt1 = 0; cnt1 < n; cnt1++) {
    if (my_list[cnt1].value * (cnt1 + 1) >= cost1) break;
  }
  if (cnt1 == n) return 0;
  for (cnt2 = cnt1 + 1; cnt2 < n; cnt2++) {
    if (my_list[cnt2].value * (cnt2 - cnt1) >= cost2) break;
  }
  if (cnt2 == n) return 0;
  if (!k) {
    cout << "Yes" << endl;
    cout << cnt1 + 1 << " " << cnt2 - cnt1 << endl;
    for (int i = 0; i <= cnt1; i++) {
      cout << my_list[i].location << " ";
    }
    cout << endl;
    for (int i = cnt1 + 1; i <= cnt2; i++) {
      cout << my_list[i].location << " ";
    }
    cout << endl;
  } else {
    cout << "Yes" << endl;
    cout << cnt2 - cnt1 << " " << cnt1 + 1 << endl;
    for (int i = cnt1 + 1; i <= cnt2; i++) {
      cout << my_list[i].location << " ";
    }
    cout << endl;
    for (int i = 0; i <= cnt1; i++) {
      cout << my_list[i].location << " ";
    }
    cout << endl;
  }
  return 1;
}
bool sum(node &p1, node &p2) { return p1.value > p2.value; }
int main() {
  ios::sync_with_stdio(false);
  node temp;
  cin >> n >> cost1 >> cost2;
  for (int i = 1; i <= n; i++) {
    cin >> temp.value;
    temp.location = i;
    my_list.push_back(temp);
  }
  sort(my_list.begin(), my_list.end(), sum);
  if (func1(0)) return 0;
  swap(cost1, cost2);
  if (func1(1)) return 0;
  cout << "No" << endl;
}
