#include <bits/stdc++.h>
using namespace std;
const int maxn = 300010;
pair<long long, long long> servers[maxn];
int main() {
  long long n, x1, x2;
  scanf("%lld%lld%lld", &n, &x1, &x2);
  for (int i = 1; i <= n; i++) {
    scanf("%lld", &servers[i].first);
    servers[i].second = i;
  }
  sort(servers + 1, servers + n + 1);
  bool ans = false;
  long long a = -1, b = -1;
  for (long long i = n; i >= 1; i--) {
    if ((servers[i].first) * (n + 1 - i) >= x1) {
      a = i;
      break;
    }
  }
  for (long long i = a - 1; i >= 1; i--) {
    if ((servers[i].first) * (a - i) >= x2) {
      b = i;
      break;
    }
  }
  if (a != -1 && b != -1) {
    printf("Yes\n");
    printf("%lld %lld\n", n + 1 - a, a - b);
    for (int i = a; i < n; i++) printf("%lld ", servers[i].second);
    printf("%lld\n", servers[n].second);
    for (int i = b; i < a - 1; i++) printf("%lld ", servers[i].second);
    printf("%lld\n", servers[a - 1].second);
    return 0;
  }
  a = -1;
  b = -1;
  for (long long i = n; i >= 1; i--) {
    if ((servers[i].first) * (n + 1 - i) >= x2) {
      a = i;
      break;
    }
  }
  for (long long i = a - 1; i >= 1; i--) {
    if ((servers[i].first) * (a - i) >= x1) {
      b = i;
      break;
    }
  }
  if (a != -1 && b != -1) {
    printf("Yes\n");
    printf("%lld %lld\n", a - b, n + 1 - a);
    for (int i = b; i < a - 1; i++) printf("%lld ", servers[i].second);
    printf("%lld\n", servers[a - 1].second);
    for (int i = a; i < n; i++) printf("%lld ", servers[i].second);
    printf("%lld\n", servers[n].second);
    return 0;
  }
  printf("No\n");
  return 0;
}
