#include <bits/stdc++.h>
using namespace std;
int n, x1, x2;
struct server {
  int c, ind;
  bool b1, b2;
  int r1, r2;
} * *srv;
void qs(server** a, int l, int r) {
  int i = l, j = r;
  int p = a[(l + r) >> 1]->c;
  do {
    while (i < r && a[i]->c < p) i++;
    while (j > l && a[j]->c > p) j--;
    if (i <= j) swap(a[i++], a[j--]);
  } while (i <= j);
  if (i < r) qs(a, i, r);
  if (j > l) qs(a, l, j);
}
int main() {
  scanf("%d %d %d", &n, &x1, &x2);
  srv = new server*[n];
  for (int i = 0; i < n; i++) {
    srv[i] = new server;
    scanf("%d", &srv[i]->c);
    srv[i]->ind = i;
  }
  qs(srv, 0, n - 1);
  for (int i = n - 1; i >= 0; i--) {
    srv[i]->r1 = ((long long)x1 + (long long)srv[i]->c - (long long)1) /
                 (long long)srv[i]->c;
    srv[i]->r2 = ((long long)x2 + (long long)srv[i]->c - (long long)1) /
                 (long long)srv[i]->c;
    if (i < n - 1 && srv[i + 1]->b1)
      srv[i]->b1 = 1;
    else if (srv[i]->r1 <= n - i)
      srv[i]->b1 = 1;
    else
      srv[i]->b1 = 0;
    if (i < n - 1 && srv[i + 1]->b2)
      srv[i]->b2 = 1;
    else if (srv[i]->r2 <= n - i)
      srv[i]->b2 = 1;
    else
      srv[i]->b2 = 0;
  }
  for (int i = 0; i < n - 1; i++) {
    if (srv[i]->r1 < n - i && srv[i + srv[i]->r1]->b2) {
      for (int j = i + srv[i]->r1; j < n; j++) {
        if (srv[j]->r2 <= n - j) {
          printf("Yes\n");
          printf("%d %d\n", srv[i]->r1, srv[j]->r2);
          for (int k = 0; k < srv[i]->r1; k++)
            printf("%d ", srv[i + k]->ind + 1);
          printf("\n");
          for (int k = 0; k < srv[j]->r2; k++)
            printf("%d ", srv[j + k]->ind + 1);
          printf("\n");
          return 0;
        }
      }
    }
  }
  for (int i = 0; i < n - 1; i++) {
    if (srv[i]->r2 < n - i && srv[i + srv[i]->r2]->b1) {
      for (int j = i + srv[i]->r2; j < n; j++) {
        if (srv[j]->r1 <= n - j) {
          printf("Yes\n");
          printf("%d %d\n", srv[j]->r1, srv[i]->r2);
          for (int k = 0; k < srv[j]->r1; k++)
            printf("%d ", srv[j + k]->ind + 1);
          printf("\n");
          for (int k = 0; k < srv[i]->r2; k++)
            printf("%d ", srv[i + k]->ind + 1);
          printf("\n");
          return 0;
        }
      }
    }
  }
  printf("No\n");
  return 0;
}
