#include <bits/stdc++.h>
using namespace std;
const double PI = acos(-1.0);
const double eps = 1e-6;
const int INF = 0x3f3f3f3f;
const int maxn = 3e5 + 11;
long long N, M, T, P, Q, X1, X2, S1;
pair<long long, int> c[maxn];
long long s[maxn];
bool can1[maxn], can2[maxn];
int main() {
  cin >> N >> X1 >> X2;
  for (int i = 1; i <= N; i++) {
    scanf("%lld", &c[i].first), c[i].second = i;
  }
  for (int i = 1; i <= N; i++) {
    s[i] += c[i].first;
  }
  sort(c + 1, c + N + 1);
  long long t = 1, p1 = 0, p2 = 0;
  for (t = 1; t <= N; t++) {
    if (c[N + 1 - t].first >= (X1 + t - 1) / t) {
      p1 = max(p1, N + 1 - t);
    }
    if (c[N + 1 - t].first >= (X2 + t - 1) / t) {
      p2 = max(p2, N + 1 - t);
    }
  }
  for (int S1 = 1; S1 <= N; S1++) {
    int pos =
        lower_bound(c + 1, c + N + 1, make_pair((X1 + S1 - 1) / S1, 0)) - c;
    if (pos + S1 <= p2) {
      puts("Yes");
      cout << S1 << " " << N - p2 + 1 << endl;
      for (int i = pos; i < pos + S1; i++) {
        printf("%d ", c[i].second);
      }
      cout << endl;
      for (int i = p2; i <= N; i++) {
        printf("%d ", c[i].second);
      }
      cout << endl;
      return 0;
    }
  }
  swap(X1, X2);
  for (int S1 = 1; S1 <= N; S1++) {
    int pos =
        lower_bound(c + 1, c + N + 1, make_pair((X1 + S1 - 1) / S1, 0)) - c;
    if (pos + S1 <= p1) {
      puts("Yes");
      cout << N - p1 + 1 << " " << S1 << endl;
      for (int i = p1; i <= N; i++) {
        printf("%d ", c[i].second);
      }
      cout << endl;
      for (int i = pos; i < pos + S1; i++) {
        printf("%d ", c[i].second);
      }
      cout << endl;
      return 0;
    }
  }
  puts("No");
  return 0;
}
