#include <bits/stdc++.h>
using namespace std;
const int N = 533333, EE = 100000000, GG = 1000000000, ima = 2147483647;
int eq(double a, double b) {
  return a + 0.00000000001 >= b && b + 0.00000000001 >= a;
}
template <typename T>
void _ma(T &a, T b) {
  if (a < b) {
    a = b;
  }
}
template <typename T>
void _mi(T &a, T b) {
  if (a > b) {
    a = b;
  }
}
namespace io {
void _(int &k) {
  char c;
  int e = 1;
  k = 0;
  while ((c = getchar()) > '9' || c < '0')
    if (c == '-') {
      e = -1;
    }
  k = c - '0';
  while ((c = getchar()) <= '9' && c >= '0') {
    k *= 10;
    k += c - '0';
  }
  k *= e;
}
void _(long long &k) {
  char c;
  int e = 1;
  k = 0;
  while ((c = getchar()) > '9' || c < '0')
    if (c == '-') {
      e = -1;
    }
  k = c - '0';
  while ((c = getchar()) <= '9' && c >= '0') {
    k *= 10;
    k += c - '0';
  }
  k *= e;
}
void _(int &a, int &b) {
  _(a);
  _(b);
}
void _(int &a, int &b, int &c, int &d, int &e) {
  _(a);
  _(b);
  _(c);
  _(d);
  _(e);
}
void _(int &a, int &b, int &c, int &d) {
  _(a);
  _(b);
  _(c);
  _(d);
}
void _(int &a, int &b, int &c) {
  _(a);
  _(b);
  _(c);
}
void _(long long &a, long long &b) {
  _(a);
  _(b);
}
void _(long long &a, long long &b, long long &c, long long &d, long long &e) {
  _(a);
  _(b);
  _(c);
  _(d);
  _(e);
}
void _(long long &a, long long &b, long long &c) {
  _(a);
  _(b);
  _(c);
}
void _(long long &a, long long &b, long long &c, long long &d) {
  _(a);
  _(b);
  _(c);
  _(d);
}
void _c(char &c) {
  while ((c = getchar()) == ' ' || c == '\n')
    ;
}
void _p0(int k) {
  if (k >= 10) {
    _p0(k / 10);
  }
  putchar(k % 10 + '0');
}
void _p0(long long k) {
  if (k >= 10) {
    _p0(k / 10);
  }
  putchar(k % 10 + '0');
}
void _p(int k) {
  if (k < 0) {
    putchar('-');
    _p0(-k);
  } else {
    _p0(k);
  }
}
void _p(long long k) {
  if (k < 0) {
    putchar('-');
    _p0(-k);
  } else {
    _p0(k);
  }
}
void __p(int k) {
  _p(k);
  putchar(' ');
}
void _pn(int k) {
  _p(k);
  putchar('\n');
}
void __p(long long k) {
  _p(k);
  putchar(' ');
}
void _pn(long long k) {
  _p(k);
  putchar('\n');
}
void _p(int a, int b) {
  __p(a);
  _pn(b);
}
void _p(int a, int b, int c) {
  __p(a);
  __p(b);
  _pn(c);
}
void _p(int a, int b, int c, int d) {
  __p(a);
  __p(b);
  __p(c);
  _pn(d);
}
}  // namespace io
namespace graph {
int fr[N], nx[N], t[N], w[N], j2;
void me(int s1, int t1) {
  nx[++j2] = fr[s1];
  fr[s1] = j2;
  t[j2] = t1;
}
void me(int s1, int t1, int w1) {
  nx[++j2] = fr[s1];
  fr[s1] = j2;
  t[j2] = t1;
  w[j2] = w1;
}
void me1(int s1, int t1) {
  me(s1, t1);
  me(t1, s1);
}
void me1(int s1, int t1, int w1) {
  me(s1, t1, w1);
  me(t1, s1, w1);
}
}  // namespace graph
namespace ufs {
int fa[N];
void _init(int n) {
  int i;
  for (i = 1; i <= n; i++) fa[i] = i;
}
int fi(int k) { return fa[k] = fa[k] == k ? k : fi(fa[k]); }
void hb(int a, int b) {
  a = fi(a);
  b = fi(b);
  fa[a] = b;
}
}  // namespace ufs
using namespace io;
int n, m, f[N], g[N], j2, j3;
pair<int, int> a[N];
int ck(int first, int second) {
  int i, n1 = n;
  j2 = 0;
  j3 = 0;
  for (i = n1; i >= 1; i--) {
    f[++j2] = a[i].second;
    if (a[i].first * (n1 - i + 1) >= first) {
      n1 = i - 1;
      break;
    }
  }
  for (i = n1; i >= 1; i--) {
    g[++j3] = a[i].second;
    if (a[i].first * (n1 - i + 1) >= second) {
      n1 = i - 1;
      break;
    }
  }
  return i;
}
int main() {
  int i, j, a1, a2;
  _(n, a1, a2);
  for (i = 1; i <= n; i++) {
    _(a[i].first);
    a[i].second = i;
  }
  sort(a + 1, a + n + 1);
  if (ck(a1, a2)) {
    puts("Yes");
    _p(j2, j3);
    for (i = 1; i <= j2 - 1; i++) __p(f[i]);
    _pn(f[j2]);
    for (i = 1; i <= j3 - 1; i++) __p(g[i]);
    _pn(g[j3]);
  } else if (ck(a2, a1)) {
    puts("Yes");
    _p(j3, j2);
    for (i = 1; i <= j3 - 1; i++) __p(g[i]);
    _pn(g[j3]);
    for (i = 1; i <= j2 - 1; i++) __p(f[i]);
    _pn(f[j2]);
  } else {
    puts("No");
  }
}
