#include <bits/stdc++.h>
using namespace std;
struct N {
  int id;
  long long E;
} node[300000 + 10];
int T;
long long A, B;
bool cmp(const N &a, const N &b) { return a.E < b.E; }
void init() {
  cin >> T >> A >> B;
  for (int i = 0; i < T; i++) {
    node[i].id = i + 1;
    cin >> node[i].E;
  }
  sort(node, node + T, cmp);
  return;
}
void judge() {
  int kase = T - 1;
  int x = 1;
  while (kase >= 0) {
    if (node[kase].E * x >= A) {
      kase--;
      break;
    }
    x++;
    kase--;
  }
  if (kase >= 0) {
    int y = 1;
    while (kase >= 0) {
      if (node[kase].E * y >= B) {
        printf("Yes\n%d %d\n", x, y);
        for (int i = T - x; i < T; i++) {
          printf("%d", node[i].id);
          if (i == T - 1) {
            printf("\n");
          } else {
            printf(" ");
          }
        }
        for (int i = kase; i < T - x; i++) {
          printf("%d", node[i].id);
          if (i == T - x - 1) {
            printf("\n");
          } else {
            printf(" ");
          }
        }
        return;
      }
      kase--;
      y++;
    }
  }
  kase = T - 1;
  int y = 1;
  while (kase >= 0) {
    if (node[kase].E * y >= B) {
      kase--;
      break;
    }
    y++;
    kase--;
  }
  if (kase < 0) {
    printf("No\n");
    return;
  }
  x = 1;
  while (kase >= 0) {
    if (node[kase].E * x >= A) {
      printf("Yes\n%d %d\n", x, y);
      for (int i = kase; i < T - y; i++) {
        printf("%d", node[i].id);
        if (i == T - y - 1) {
          printf("\n");
        } else {
          printf(" ");
        }
      }
      for (int i = T - y; i < T; i++) {
        printf("%d", node[i].id);
        if (i == T - 1) {
          printf("\n");
        } else {
          printf(" ");
        }
      }
      return;
    }
    kase--;
    x++;
  }
  printf("No\n");
  return;
}
int main() {
  init();
  judge();
  return 0;
}
