#include <bits/stdc++.h>
using namespace std;
struct __s {
  __s() {
    if (1) {
      ios_base::Init i;
      cin.sync_with_stdio(0);
      cin.tie(0);
    }
  }
  ~__s() {
    if (!1)
      fprintf(stderr, "Execution time: %.3lf s.\n",
              (double)clock() / CLOCKS_PER_SEC);
    long long n;
    cin >> n;
  }
} __S;
long long c[311111];
long long I[311111];
bool comp(long long i, long long j) { return c[i] > c[j]; }
bool get(long long n, long long x, vector<bool> &u, vector<long long> &v) {
  long long sum = 0;
  long long cnt = 0;
  long long y = 0;
  long long i = 0;
  while (i < n) {
    long long idx = I[i];
    if (u[idx]) {
      i++;
      continue;
    }
    u[idx] = true;
    y = c[idx];
    v.push_back(idx + 1);
    sum += y;
    cnt++;
    if (sum >= x && (x + cnt - 1) / cnt <= y) return true;
    i++;
  }
  return false;
}
bool check(long long n, long long x1, long long x2, bool f) {
  vector<bool> u(n, false);
  vector<long long> v[2];
  if (get(n, x1, u, v[0]) && get(n, x2, u, v[1])) {
    cout << "Yes" << '\n';
    cout << v[f].size() << " " << v[!f].size() << '\n';
    for (long long i = 0; i < (long long)(v[f].size()); i++) {
      cout << v[f][i] << " ";
    }
    cout << '\n';
    for (long long i = 0; i < (long long)(v[!f].size()); i++) {
      cout << v[!f][i] << " ";
    }
    cout << '\n';
    return true;
  }
  return false;
}
int main(void) {
  long long n, x1, x2;
  cin >> n >> x1 >> x2;
  for (long long i = 0; i < (long long)(n); i++) {
    cin >> c[i];
    I[i] = i;
  }
  sort(I, I + n, comp);
  if (check(n, x1, x2, 0)) return 0;
  if (check(n, x2, x1, 1)) return 0;
  cout << "No" << '\n';
  return 0;
}
