#include <bits/stdc++.h>
using namespace std;
struct abc {
  int id;
  double c;
};
abc arr[300005];
vector<int> vv[4];
bool comp(abc a, abc b) { return a.c > b.c; }
int n;
bool solve(double x1, double x2, int x) {
  int I = -1;
  double z = 1;
  for (int i = 1; i <= n; i++) {
    if (x1 / z <= arr[i].c) {
      I = i;
      break;
    }
    z++;
  }
  if (I == -1) return 0;
  z = 1;
  int II = -1;
  for (int i = I + 1; i <= n; i++) {
    if (x2 / z <= arr[i].c) {
      II = i;
      break;
    }
    z++;
  }
  if (II == -1) return 0;
  int fst, snd;
  if (x == 1) {
    fst = 1;
    snd = 2;
  } else {
    fst = 2;
    snd = 1;
  }
  for (int i = 1; i <= I; i++) {
    vv[fst].push_back(arr[i].id);
  }
  for (int i = I + 1; i <= II; i++) {
    vv[snd].push_back(arr[i].id);
  }
  sort(vv[1].begin(), vv[1].end());
  sort(vv[2].begin(), vv[2].end());
  return true;
}
int main() {
  long long x1, x2;
  scanf("%d %I64d %I64d", &n, &x1, &x2);
  for (int i = 1; i <= n; i++) {
    cin >> arr[i].c;
    arr[i].id = i;
  }
  sort(arr + 1, arr + n + 1, comp);
  bool ans = solve(x1, x2, 1);
  if (ans == 0) {
    ans = solve(x2, x1, 2);
    if (ans == 0) {
      cout << "No";
      return 0;
    }
  }
  cout << "Yes" << endl;
  printf("%d %d\n", vv[1].size(), vv[2].size());
  for (int i = 0; i < vv[1].size(); i++) printf("%d ", vv[1][i]);
  printf("\n");
  for (int i = 0; i < vv[2].size(); i++) printf("%d ", vv[2][i]);
}
