#include <bits/stdc++.h>
using namespace std;
const int inf = (int)1e9;
const long long llinf = (long long)3e18;
const int N = (int)1e5 + 111;
const long double PI = (long double)acos(-1);
int n, x1, x2, mn, j, k1, k2;
vector<pair<int, int> > arr1, arr2;
vector<int> a, b, ans1, ans2;
bool solve(int x1, int x2, bool is_swap) {
  bool ok = false;
  for (int i = 0; i < n; i++) a.push_back(arr1[i].first);
  for (k1 = 1; k1 <= n; k1++) {
    mn = (x2 + k1 - 1) / k1;
    j = (int)(lower_bound(a.begin(), a.end(), mn) - a.begin());
    if (n - j >= k1) {
      for (int i = j; i < j + k1; i++) ans1.push_back(arr1[i].second);
      break;
    }
  }
  for (int i = 0; i < j; i++) arr2.push_back(arr1[i]);
  for (int i = j + k1; j < n; j++) arr2.push_back(arr1[i]);
  n -= k1;
  for (int i = 0; i < n; i++) b.push_back(arr2[i].first);
  for (k2 = 1; k2 <= n; k2++) {
    mn = (x1 + k2 - 1) / k2;
    j = (int)(lower_bound(b.begin(), b.end(), mn) - b.begin());
    if (n - j >= k2) {
      for (int i = j; i < j + k2; i++) ans2.push_back(arr2[i].second);
      ok = true;
      break;
    }
  }
  if (ok) {
    if (is_swap) {
      printf("Yes\n%d %d", k1, k2);
      printf("\n");
      for (int i = 0; i < k1; i++) printf("%d ", ans1[i]);
      printf("\n");
      for (int i = 0; i < k2; i++) printf("%d ", ans2[i]);
    } else {
      printf("Yes\n%d %d", k2, k1);
      printf("\n");
      for (int i = 0; i < k2; i++) printf("%d ", ans2[i]);
      printf("\n");
      for (int i = 0; i < k1; i++) printf("%d ", ans1[i]);
    }
    return true;
  } else
    return false;
}
int main() {
  scanf("%d %d %d", &n, &x1, &x2);
  arr1.resize(n);
  for (int i = 0; i < n; i++) {
    scanf("%d", &arr1[i].first);
    arr1[i].second = i + 1;
  }
  sort(arr1.begin(), arr1.end());
  if (!solve(x1, x2, false))
    if (!solve(x2, x1, true)) printf("No");
  return 0;
}
