#include <bits/stdc++.h>
using namespace std;
template <class T>
T sqr(const T &a) {
  return a * a;
}
const int MAXN = 3e5 + 100;
pair<int, int> a[MAXN];
int n, x1, x2;
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  scanf("%d%d%d", &n, &x1, &x2);
  for (int i = 0; i < (n); i++) scanf("%d", &a[i].first), a[i].second = i;
  sort(a, a + n);
  for (int qq = 0; qq < (2); qq++) {
    int mx = -1, cnt2Ans = 0;
    for (int cnt2 = (1); cnt2 < (n); cnt2++) {
      int z = (x2 + cnt2 - 1) / cnt2;
      int pos = lower_bound(a, a + n, make_pair(z, 0)) - a;
      if (n - pos >= cnt2) pos = n - cnt2;
      if (n - pos >= cnt2 && pos > mx) mx = pos, cnt2Ans = cnt2;
    }
    if (mx == -1) {
      continue;
    }
    for (int cnt1 = (1); cnt1 < (n); cnt1++) {
      int z = (x1 + cnt1 - 1) / cnt1;
      int pos = lower_bound(a, a + n, make_pair(z, 0)) - a;
      if (pos + cnt1 <= mx) {
        puts("Yes");
        if (qq) swap(cnt1, cnt2Ans), swap(pos, mx);
        printf("%d %d\n", cnt1, cnt2Ans);
        for (int i = (pos); i < (pos + cnt1); i++) {
          printf("%d ", a[i].second + 1);
        }
        puts("");
        for (int i = (mx); i < (mx + cnt2Ans); i++) {
          printf("%d ", a[i].second + 1);
        }
        return 0;
      }
    }
    swap(x1, x2);
  }
  puts("No");
}
