#include <bits/stdc++.h>
using namespace std;
const int N = 666666;
const int M = 666;
const long long md = 1e9 + 7;
long long addmod(long long a, long long b) { return (a + b) % md; }
template <class T>
void mine(T& a, T b) {
  if (a > b) a = b;
}
int n, m, k, q;
long long ans;
int a[N], b[N];
int ans1, ans2;
int a1[N], a2[N];
pair<int, int> p[N];
int x[N];
void gen(int* a, int sa, int* b, int sb) {
  for (int i = 1; i <= sa + sb; i++) {
    int t = p[n + 1 - i].second;
    if (i <= sa)
      a[i] = t;
    else
      b[i - sa] = t;
  }
}
int main() {
  ios::sync_with_stdio(false);
  cout << setprecision(20);
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &p[i].first);
    p[i].second = i;
  }
  sort(p + 1, p + n + 1);
  for (int i = 1; i <= n; i++) x[i] = p[i].first;
  int m1 = md, m2 = md;
  for (int i = 1; i <= n; i++) {
    a[i] = lower_bound(x + 1, x + n + 1, (m - 1) / i + 1) - x;
    b[i] = lower_bound(x + 1, x + n + 1, (k - 1) / i + 1) - x;
    if ((m - 1) / i + 1 <= x[n + 1 - i]) mine(m1, i);
    if ((k - 1) / i + 1 <= x[n + 1 - i]) mine(m2, i);
  }
  for (int i = 1; i <= n; i++) {
    if (n + 1 - a[i] >= i + m2) {
      ans1 = i;
      ans2 = m2;
      gen(a2, ans2, a1, ans1);
      break;
    }
    if (n + 1 - b[i] >= i + m1) {
      ans2 = i;
      ans1 = m1;
      gen(a1, ans1, a2, ans2);
      break;
    }
  }
  if (ans1) {
    printf("Yes\n%d %d\n", ans1, ans2);
    for (int i = 1; i <= ans1; i++)
      printf("%d%c", a1[i], i == ans1 ? '\n' : ' ');
    for (int i = 1; i <= ans2; i++)
      printf("%d%c", a2[i], i == ans2 ? '\n' : ' ');
  } else
    puts("No");
  return 0;
}
