#include <bits/stdc++.h>
using namespace std;
const int MAXN = 300010;
pair<int, int> c[MAXN];
int n, x[2];
bool check(int pos, int fst, int snd) {
  int a = c[pos].first;
  int k = (x[fst] + a - 1) / a;
  if (pos + k >= n) {
    return false;
  }
  int val = c[pos + k].first;
  int dk = (x[snd] + val - 1) / val;
  if (pos + k + dk > n) {
    return false;
  }
  if (fst == 0) {
    printf("Yes\n");
    printf("%d %d\n", k, dk);
    for (int i = 0; i < k; ++i) {
      printf("%d ", c[pos + i].second + 1);
    }
    printf("\n");
    for (int i = 0; i < dk; ++i) {
      printf("%d ", c[pos + k + i].second + 1);
    }
    printf("\n");
  } else {
    printf("Yes\n");
    printf("%d %d\n", dk, k);
    for (int i = 0; i < dk; ++i) {
      printf("%d ", c[pos + k + i].second + 1);
    }
    printf("\n");
    for (int i = 0; i < k; ++i) {
      printf("%d ", c[pos + i].second + 1);
    }
    printf("\n");
  }
  return true;
}
int main() {
  scanf("%d%d%d", &n, &x[0], &x[1]);
  for (int i = 0; i < n; ++i) {
    scanf("%d", &c[i].first);
    c[i].second = i;
  }
  sort(c, c + n);
  for (int i = 0; i < n; ++i) {
    if (check(i, 0, 1) || check(i, 1, 0)) {
      return 0;
    }
  }
  printf("No\n");
  return 0;
}
