#include <bits/stdc++.h>
using namespace std;
const int maxn = 3e5 + 10;
const int inf = 0x3f3f3f3f;
struct node {
  int id;
  int w;
  bool operator<(const node b) const { return w < b.w; }
} a[maxn];
int ans[maxn];
int main() {
  int n, x1, x2;
  cin >> n >> x1 >> x2;
  for (int i = 1; i <= n; ++i) cin >> a[i].w, a[i].id = i;
  sort(a + 1, a + n + 1);
  for (int i = n - 1; i > 0; --i) {
    if ((long long)a[i].w * (n - i + 1) < x1 &&
        (long long)a[i].w * (n - i + 1) < x2)
      continue;
    int res = ceil((double)x1 / a[i].w);
    if (res < n - i + 1) {
      if ((long long)a[i + res].w * (n - i - res + 1) >= x2) {
        puts("Yes");
        int res2 = ceil((double)x2 / a[i + res].w);
        cout << res << " " << res2 << endl;
        for (int j = i; j < i + res; ++j) cout << a[j].id << " ";
        cout << endl;
        for (int j = i + res; j < i + res + res2; ++j) cout << a[j].id << " ";
        cout << endl;
        return 0;
      }
    }
    res = ceil((double)x2 / a[i].w);
    if (res < n - i + 1) {
      if ((long long)a[i + res].w * (n - i - res + 1) >= x1) {
        puts("Yes");
        int res2 = ceil((double)x1 / a[i + res].w);
        cout << res2 << " " << res << endl;
        for (int j = i + res; j < i + res + res2; ++j) cout << a[j].id << " ";
        cout << endl;
        for (int j = i; j < i + res; ++j) cout << a[j].id << " ";
        cout << endl;
        return 0;
      }
    }
  }
  puts("No");
}
