#include <bits/stdc++.h>
static const int INF = 0x3f3f3f3f;
static const long long INFL = 0x3f3f3f3f3f3f3f3fLL;
template <typename T, typename U>
static void amin(T &x, U y) {
  if (y < x) x = y;
}
template <typename T, typename U>
static void amax(T &x, U y) {
  if (x < y) x = y;
}
using namespace std;
pair<int, int> c[300888];
int n, qw[2];
bool is(int p, int first, int second) {
  int a = c[p].first;
  int k = (qw[first] + a - 1) / a;
  if (p + k >= n) {
    return false;
  }
  int val = c[p + k].first;
  int dk = (qw[second] + val - 1) / val;
  if (p + k + dk > n) {
    return false;
  }
  if (first == 0) {
    cout << "Yes" << endl;
    cout << k << " " << dk << endl;
    for (int(i) = 0; (i) < (int)(k); ++(i)) {
      cout << c[p + i].second + 1 << " ";
    }
    cout << endl;
    for (int(i) = 0; (i) < (int)(dk); ++(i)) {
      cout << c[p + k + i].second + 1 << " ";
    }
    cout << endl;
  } else {
    cout << "Yes" << endl;
    cout << dk << " " << k << endl;
    for (int(i) = 0; (i) < (int)(dk); ++(i)) {
      cout << c[p + k + i].second + 1 << " ";
    }
    cout << endl;
    for (int(i) = 0; (i) < (int)(k); ++(i)) {
      cout << c[p + i].second + 1 << " ";
    }
    cout << endl;
  }
  return true;
}
int main() {
  cin >> n >> qw[0] >> qw[1];
  for (int(i) = 0; (i) < (int)(n); ++(i)) {
    cin >> c[i].first;
    c[i].second = i;
  }
  sort(c, c + n);
  for (int(i) = 0; (i) < (int)(n); ++(i)) {
    if (is(i, 0, 1) || is(i, 1, 0)) {
      return 0;
    }
  }
  cout << "No" << endl;
  return 0;
}
