#include <bits/stdc++.h>
using namespace std;
const int maxn = 300005;
struct node {
  long long x;
  int id;
} c[maxn];
bool cmp(const node &a, const node &b) { return a.x > b.x; }
int main() {
  int n;
  long long x1, x2;
  scanf("%d%I64d%I64d", &n, &x1, &x2);
  for (int i = 1; i <= n; i++) {
    scanf("%I64d", &c[i].x);
    c[i].id = i;
  }
  sort(c + 1, c + n + 1, cmp);
  int bb = 0;
  for (long long i = 1; i < n; i++) {
    if (x1 <= c[i].x * i) {
      for (long long j = i + 1; j <= n; j++) {
        if (x2 <= c[j].x * (j - i)) {
          bb = 1;
          printf("Yes\n");
          printf("%I64d %I64d\n", i, j - i);
          for (int k = 1; k <= i; k++) {
            printf("%d", c[k].id);
            if (k != i)
              printf(" ");
            else
              printf("\n");
          }
          for (int k = i + 1; k <= j; k++) {
            printf("%d", c[k].id);
            if (k != j)
              printf(" ");
            else
              printf("\n");
          }
          break;
        }
      }
      break;
    }
  }
  if (!bb) {
    swap(x1, x2);
    for (long long i = 1; i < n; i++) {
      if (x1 <= c[i].x * i) {
        for (long long j = i + 1; j <= n; j++) {
          if (x2 <= c[j].x * (j - i)) {
            bb = 1;
            printf("Yes\n");
            printf("%I64d %I64d\n", j - i, i);
            for (int k = i + 1; k <= j; k++) {
              printf("%d", c[k].id);
              if (k != j)
                printf(" ");
              else
                printf("\n");
            }
            for (int k = 1; k <= i; k++) {
              printf("%d", c[k].id);
              if (k != i)
                printf(" ");
              else
                printf("\n");
            }
            break;
          }
        }
        break;
      }
    }
  }
  if (!bb) printf("No\n");
  return 0;
}
