#include <bits/stdc++.h>
using namespace std;
struct idt {
  int v, idx;
};
idt a[300015];
bool cmp(idt a, idt b) { return a.v < b.v; }
int main() {
  int n, x1, x2;
  cin >> n >> x1 >> x2;
  for (int i = 0; i < n; i++) {
    cin >> a[i].v;
    a[i].idx = i + 1;
  }
  sort(a, a + n, cmp);
  int data = n;
  bool ans = 0;
  vector<int> v1, v2;
  for (int i = 0; i < n; i++) {
    int awal = ceil((double)x1 / a[i].v);
    if (data > awal) {
      int data2 = data - awal;
      int akhir = ceil((double)x2 / a[i + awal].v);
      if (data2 >= akhir) {
        ans = 1;
        for (int j = i; j < i + awal; j++) v1.push_back(a[j].idx);
        for (int j = i + awal; j < i + awal + akhir; j++)
          v2.push_back(a[j].idx);
        break;
      }
    }
    awal = ceil((double)x2 / a[i].v);
    if (data > awal) {
      int data2 = data - awal;
      int akhir = ceil((double)x1 / a[i + awal].v);
      if (data2 >= akhir) {
        ans = 1;
        for (int j = i; j < i + awal; j++) v2.push_back(a[j].idx);
        for (int j = i + awal; j < i + awal + akhir; j++)
          v1.push_back(a[j].idx);
        break;
      }
    }
    data--;
  }
  if (ans) {
    cout << "Yes\n";
    int l1 = v1.size(), l2 = v2.size();
    cout << l1 << ' ' << l2 << "\n";
    for (int i = 0; i < l1 - 1; i++) cout << v1[i] << ' ';
    cout << v1.back() << "\n";
    for (int i = 0; i < l2 - 1; i++) cout << v2[i] << ' ';
    cout << v2.back() << "\n";
  } else
    cout << "No\n";
}
