#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 3e5 + 10;
double x1, x2;
int n;
pair<int, int> a[MAX_N];
int main() {
  scanf("%d%lf%lf", &n, &x1, &x2);
  for (int i = 1; i <= n; ++i) {
    scanf("%d", &a[i].first);
    a[i].second = i;
  }
  sort(a + 1, a + n + 1);
  int pos;
  for (pos = n; pos >= 1; --pos)
    if (x2 / (n - pos + 1) <= a[pos].first) break;
  for (int i = 1; i <= n; ++i) {
    int p = x1 / a[i].first + 1;
    while (p >= 2 && x1 / (p - 1) <= a[i].first) --p;
    if (i + p - 1 < pos) {
      puts("Yes");
      printf("%d %d\n", p, n - pos + 1);
      for (int j = i; j <= i + p - 1; ++j) printf("%d ", a[j].second);
      puts("");
      for (int j = pos; j <= n; ++j) printf("%d ", a[j].second);
      return 0;
    }
  }
  swap(x1, x2);
  for (pos = n; pos >= 1; --pos)
    if (x2 / (n - pos + 1) <= a[pos].first) break;
  for (int i = 1; i <= n; ++i) {
    int p = x1 / a[i].first + 1;
    while (p >= 2 && x1 / (p - 1) <= a[i].first) --p;
    if (i + p - 1 < pos) {
      puts("Yes");
      printf("%d %d\n", n - pos + 1, p);
      for (int j = pos; j <= n; ++j) printf("%d ", a[j].second);
      puts("");
      for (int j = i; j <= i + p - 1; ++j) printf("%d ", a[j].second);
      return 0;
    }
  }
  puts("No");
}
