#include <bits/stdc++.h>
using namespace std;
int n, x1, x2, c[300005], ind[300005];
bool cmp(int x, int y) { return c[x] < c[y]; }
bool check(bool rev) {
  int p1 = -1;
  for (int i = n - 1; i >= 0; i--) {
    if ((long long)c[i] * (n - i) >= x1) {
      p1 = i;
      break;
    }
  }
  if (p1 == -1) return false;
  int cnt1 = (x1 + c[p1] - 1) / c[p1];
  int p2 = -1;
  for (int i = p1 - 1; i >= 0; i--) {
    if ((long long)c[i] * (n - i - cnt1) >= x2) {
      p2 = i;
      break;
    }
  }
  if (p2 == -1) return false;
  int cnt2 = (x2 + c[p2] - 1) / c[p2];
  printf("Yes\n");
  vector<int> r1, r2;
  for (int i = 0; i < n; i++) {
    if (i >= p1 && cnt1 > 0) {
      r1.push_back(ind[i] + 1);
      cnt1--;
    } else if (i >= p2 && cnt2 > 0) {
      r2.push_back(ind[i] + 1);
      cnt2--;
    }
  }
  if (rev) r1.swap(r2);
  printf("%d %d\n", int(r1.size()), int(r2.size()));
  for (size_t i = 0; i < r1.size(); i++) printf("%d ", r1[i]);
  printf("\n");
  for (size_t i = 0; i < r2.size(); i++) printf("%d ", r2[i]);
  printf("\n");
  return true;
}
int main() {
  scanf("%d %d %d", &n, &x1, &x2);
  for (int i = 0; i < n; i++) {
    scanf("%d", c + i);
    ind[i] = i;
  }
  sort(ind, ind + n, cmp);
  sort(c, c + n);
  if (check(false)) return 0;
  int t = x1;
  x1 = x2;
  x2 = t;
  if (check(true)) return 0;
  printf("No\n");
  return 0;
}
