#include <bits/stdc++.h>
using namespace std;
void err(istream_iterator<string> it) {}
template <typename T, typename... Args>
void err(istream_iterator<string> it, T a, Args... args) {
  cerr << *it << " = " << a << "\n";
  err(++it, args...);
}
int main() {
  int n, i, a, b, j, x, f;
  scanf("%d", &n);
  scanf("%d%d", &a, &b);
  vector<int> v(n);
  for (i = 0; i < n; i++) scanf("%d", &v[i]);
  vector<pair<int, int> > vp(n);
  for (i = 0; i < n; i++) vp[i] = {v[i], i};
  sort(vp.begin(), vp.end());
  vector<int> ar1(n, 0), ar2(n, 0);
  for (i = 0; i < n; i++) {
    x = vp[i].first;
    ar1[i] = ((a - 1) / x) + 1;
    ar2[i] = ((b - 1) / x) + 1;
  }
  f = 0;
  vector<int> ans1, ans2;
  for (i = 0; i < n; i++) {
    if (f) break;
    x = i + ar1[i];
    if (x < n) {
      x += ar2[x];
      if (x <= n) {
        x = ar1[i], f = 1;
        for (j = i; j < i + x; j++) ans1.emplace_back(vp[j].second + 1);
        x = i + ar1[i];
        for (j = x; j < x + ar2[x]; j++) ans2.emplace_back(vp[j].second + 1);
      }
    }
    if (f) break;
    x = i + ar2[i];
    if (x < n) {
      x += ar1[x];
      if (x <= n) {
        x = ar2[i], f = 1;
        for (j = i; j < i + x; j++) ans2.emplace_back(vp[j].second + 1);
        x = i + ar2[i];
        for (j = x; j < x + ar1[x]; j++) ans1.emplace_back(vp[j].second + 1);
      }
    }
  }
  if (!f)
    printf("No\n");
  else {
    printf("Yes\n");
    a = ans1.size();
    b = ans2.size();
    printf("%d %d\n", a, b);
    for (i = 0; i < a; i++) printf("%d ", ans1[i]);
    printf("\n");
    for (i = 0; i < b; i++) printf("%d ", ans2[i]);
    printf("\n");
  }
}
