#include <bits/stdc++.h>
using std::sort;
struct thing {
  int v;
  int id;
} c[300010];
bool cmp(thing t1, thing t2) { return t1.v > t2.v; }
int n, a, b;
int k1, k2;
int main() {
  scanf("%d%d%d", &n, &a, &b);
  for (int i = 1; i <= n; ++i) scanf("%d", &c[i].v), c[i].id = i;
  sort(c + 1, c + n + 1, cmp);
  for (int i = 1; i <= n; i++) {
    k1 = ((a) / (c[i].v) + (((a) % (c[i].v)) != 0));
    if (k1 >= i) continue;
    k2 = ((b) / (c[i - k1].v) + (((b) % (c[i - k1].v)) != 0));
    if (k2 > i - k1) continue;
    printf("Yes\n%d %d\n", k1, k2);
    for (int t = i - k1 + 1; t <= i; ++t)
      printf("%d%c", c[t].id, t == i ? '\n' : ' ');
    for (int t = i - k1 - k2 + 1; t <= i - k1; ++t)
      printf("%d%c", c[t].id, t == i - k1 ? '\n' : ' ');
    return 0;
  }
  for (int i = 1; i <= n; i++) {
    k2 = ((b) / (c[i].v) + (((b) % (c[i].v)) != 0));
    if (k2 >= i) continue;
    k1 = ((a) / (c[i - k2].v) + (((a) % (c[i - k2].v)) != 0));
    if (k1 > i - k2) continue;
    printf("Yes\n%d %d\n", k1, k2);
    for (int t = i - k2 - k1 + 1; t <= i - k2; ++t)
      printf("%d%c", c[t].id, t == i - k2 ? '\n' : ' ');
    for (int t = i - k2 + 1; t <= i; ++t)
      printf("%d%c", c[t].id, t == i ? '\n' : ' ');
    return 0;
  }
  printf("No");
  return 0;
}
