#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9;
const int MAXN = 3e5 + 5;
const long long LINF = 1e18;
const double pi = 3.1415926535;
const double EPS = 1e-9;
template <class T>
using MinPQ = priority_queue<T, vector<T>, greater<T>>;
template <class T>
using MaxPQ = priority_queue<T>;
vector<pair<int, int>> c;
int n;
bool f;
bool check(int p, int x1, int x2) {
  int a = c[p].first;
  int k = (x1 + a - 1) / a;
  if (p + k >= n) return 0;
  int y = c[p + k].first;
  int del = (x2 + y - 1) / y;
  if (p + k + del > n) return 0;
  printf("Yes\n");
  if (f) {
    printf("%d %d\n", k, del);
    for (int i = 0; i < k; i++)
      printf("%d%c", c[p + i].second, " \n"[i == k - 1]);
    for (int i = 0; i < del; i++)
      printf("%d%c", c[p + k + i].second, " \n"[i == del - 1]);
  } else {
    printf("%d %d\n", del, k);
    for (int i = 0; i < del; i++)
      printf("%d%c", c[p + k + i].second, " \n"[i == del - 1]);
    for (int i = 0; i < k; i++)
      printf("%d%c", c[p + i].second, " \n"[i == k - 1]);
  }
  return 1;
}
int main() {
  int x1, x2;
  scanf("%d %d %d", &n, &x1, &x2);
  for (int i = 0; i < n; i++) {
    int val;
    scanf("%d", &val);
    c.emplace_back(val, i + 1);
  }
  sort(c.begin(), c.end());
  for (int i = 0; i < n; i++) {
    f = 1;
    if (check(i, x1, x2)) return 0;
    f = 0;
    if (check(i, x2, x1)) return 0;
  }
  printf("No\n");
  return 0;
}
