#include <bits/stdc++.h>
using namespace std;
inline char nc() {
  static char buf[100000], *p1 = buf, *p2 = buf;
  return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2)
             ? EOF
             : *p1++;
}
template <typename T = int>
inline T nxt() {
  char c = nc();
  T x = 0;
  int f = 1;
  for (; c > '9' || c < '0'; c = nc())
    if (c == '-') f = -1;
  for (; c >= '0' && c <= '9'; x = x * 10 + c - '0', c = nc())
    ;
  x *= f;
  return x;
}
const int N = 300123;
pair<int, int> a[N];
int main() {
  cin.sync_with_stdio(0);
  cin.tie(0);
  int n = nxt(), x1 = nxt(), x2 = nxt();
  for (int i = 0; i < (n); ++i) a[i] = {nxt(), i + 1};
  sort(a, a + n);
  reverse(a, a + n);
  int idx = 0;
  while (idx < n && x1 > 1LL * (idx + 1) * a[idx].first) idx++;
  if (idx < n - 1) {
    int idx2 = idx + 1;
    while (idx2 < n && x2 > 1LL * (idx2 - idx) * a[idx2].first) idx2++;
    if (idx2 != n) {
      cout << "Yes\n";
      cout << idx + 1 << ' ' << idx2 - idx << '\n';
      for (int i = 0; i < (idx2 + 1); ++i) {
        cout << a[i].second << " ";
        if (i == idx) cout << '\n';
      }
      return 0;
    }
  }
  idx = 0;
  while (idx < n && x2 > 1LL * (idx + 1) * a[idx].first) idx++;
  if (idx < n - 1) {
    int idx2 = idx + 1;
    while (idx2 < n && x1 > 1LL * (idx2 - idx) * a[idx2].first) idx2++;
    if (idx2 != n) {
      cout << "Yes\n";
      cout << idx2 - idx << ' ' << idx + 1 << '\n';
      for (int i = idx + 1; i < (idx2 + 1); ++i) cout << a[i].second << " ";
      cout << '\n';
      for (int i = 0; i < (idx + 1); ++i) cout << a[i].second << " ";
      return 0;
    }
  }
  cout << "No\n";
}
