#include <bits/stdc++.h>
using namespace std;
long long n, x1, x2;
vector<pair<long long, long long> > v;
long long sum = 0;
bool solve() {
  long long y = 0, yy = 0;
  long long x;
  for (long long i = 1; i <= n && i <= (int)v.size(); i++) {
    x = x1 / i;
    if (x1 % i) x++;
    if (v[i - 1].first >= x) {
      y = i;
      break;
    }
  }
  if (y == 0) return 0;
  yy = y;
  for (long long i = 1, j = y; j < (int)v.size(); j++, i++) {
    x = x2 / i;
    if (x2 % i) x++;
    if (v[j].first >= x) {
      yy = j + 1;
      break;
    }
  }
  if (yy == y) return 0;
  printf("Yes\n");
  printf("%lld %lld\n", y, yy - y);
  for (int i = 0; i < y; i++) {
    printf("%lld", v[i].second);
    if (i != y - 1) printf(" ");
  }
  printf("\n");
  for (int i = y; i < yy; i++) {
    printf("%lld", v[i].second);
    if (i != (int)v.size() - 1) printf(" ");
  }
  printf("\n");
  return 1;
}
bool solve1() {
  swap(x1, x2);
  long long y = 0, yy = 0;
  long long x;
  for (long long i = 1; i <= n && i <= (int)v.size(); i++) {
    x = x1 / i;
    if (x1 % i) x++;
    if (v[i - 1].first >= x) {
      y = i;
      break;
    }
  }
  if (y == 0) return 0;
  yy = y;
  for (long long i = 1, j = y; j < (int)v.size(); j++, i++) {
    x = x2 / i;
    if (x2 % i) x++;
    if (v[j].first >= x) {
      yy = j + 1;
      break;
    }
  }
  if (yy == y) return 0;
  printf("Yes\n");
  printf("%lld %lld\n", yy - y, y);
  for (int i = y; i < yy; i++) {
    printf("%lld", v[i].second);
    if (i != yy - 1) printf(" ");
  }
  printf("\n");
  for (int i = 0; i < y; i++) {
    printf("%lld", v[i].second);
    if (i != y - 1) printf(" ");
  }
  printf("\n");
  return 1;
}
int main() {
  scanf("%lld %lld %lld", &n, &x1, &x2);
  for (int i = 0; i < n; i++) {
    long long a;
    scanf("%lld", &a);
    v.push_back(pair<long long, long long>(a, i + 1));
  }
  sort(v.begin(), v.end());
  reverse(v.begin(), v.end());
  bool xx = solve();
  if (xx) return 0;
  xx = solve1();
  if (xx) return 0;
  printf("No\n");
  return 0;
}
