#include <bits/stdc++.h>
using namespace std;
int main() {
  int n, x, y, fi = 1000000, ed = 1000000, se = 1000000, de = 1000000;
  bool sw = false;
  scanf("%d%d%d", &n, &x, &y);
  pair<int, int> a[n];
  for (int i = 0; i < n; i++) {
    scanf("%d", &a[i].first);
    a[i].second = i + 1;
  }
  sort(a, a + n);
  for (int i = 0; i < n; i++) {
    if ((n - i) * a[i].first >= x &&
        ed + fi >= (x + a[i].first - 1) / a[i].first + i)
      ed = (x + a[i].first - 1) / a[i].first, fi = i;
  }
  for (int i = fi + ed; i < n; i++) {
    if ((n - i) * a[i].first >= y &&
        de + se >= (y + a[i].first - 1) / a[i].first + i)
      de = (y + a[i].first - 1) / a[i].first, se = i;
  }
  if (fi == 1000000 || se == 1000000) {
    swap(x, y);
    sw = true;
    for (int i = 0; i < n; i++) {
      if ((n - i) * a[i].first >= x &&
          ed + fi >= (x + a[i].first - 1) / a[i].first + i)
        ed = (x + a[i].first - 1) / a[i].first, fi = i;
    }
    for (int i = fi + ed; i < n; i++) {
      if ((n - i) * a[i].first >= y &&
          de + se >= (y + a[i].first - 1) / a[i].first + i)
        de = (y + a[i].first - 1) / a[i].first, se = i;
    }
  }
  if (fi == 1000000 || se == 1000000)
    printf("No");
  else {
    if (sw) {
      swap(fi, se);
      swap(ed, de);
    }
    printf("Yes\n%d %d\n", ed, de);
    for (int i = fi; i < fi + ed; i++) printf("%d ", a[i].second);
    printf("\n");
    for (int i = se; i < se + de; i++) printf("%d ", a[i].second);
  }
}
