#include <bits/stdc++.h>
using namespace std;
const int max_n = 303333, inf = 1000111222;
int n, x, y;
pair<int, int> a[max_n];
void wa() {
  printf("No\n");
  exit(0);
}
int main() {
  scanf("%d%d%d", &n, &x, &y);
  for (int i = 0; i < n; ++i) {
    scanf("%d", &a[i].first);
    a[i].second = i + 1;
  }
  sort(a, a + n);
  int last = -1;
  for (int i = n - 1; i >= 0; --i) {
    if (1LL * a[i].first * (n - i) >= y) {
      last = i;
      break;
    }
  }
  if (last == -1) {
    wa();
  }
  for (int i = 0; i < n; ++i) {
    int need = (x + a[i].first - 1) / a[i].first;
    if (i + need <= last) {
      printf("Yes\n");
      printf("%d %d\n", need, n - last);
      for (int j = i; j < i + need; ++j) {
        printf("%d ", a[j].second);
      }
      printf("\n");
      for (int j = last; j < n; ++j) {
        printf("%d ", a[j].second);
      }
      printf("\n");
      return 0;
    }
  }
  swap(x, y);
  last = -1;
  for (int i = n - 1; i >= 0; --i) {
    if (1LL * a[i].first * (n - i) >= y) {
      last = i;
      break;
    }
  }
  if (last == -1) {
    wa();
  }
  for (int i = 0; i < n; ++i) {
    int need = (x + a[i].first - 1) / a[i].first;
    if (i + need <= last) {
      printf("Yes\n");
      printf("%d %d\n", n - last, need);
      for (int j = last; j < n; ++j) {
        printf("%d ", a[j].second);
      }
      printf("\n");
      for (int j = i; j < i + need; ++j) {
        printf("%d ", a[j].second);
      }
      printf("\n");
      return 0;
    }
  }
  wa();
  return 0;
}
