#include <bits/stdc++.h>
using namespace std;
struct node {
  long long a, id;
  bool operator<(const node& x) const { return a > x.a; }
} p[300005];
int n, s1, s2;
vector<long long> v1, v2;
int judge() {
  v1.clear();
  v2.clear();
  int i, j;
  for (i = 1; i <= n; i++) {
    v1.push_back(p[i].id);
    if (p[i].a * i >= s1) break;
  }
  if (i == n + 1) {
    return 0;
  }
  for (j = i + 1; j <= n; j++) {
    v2.push_back(p[j].id);
    if (p[j].a * (j - i) >= s2) break;
  }
  if (j == n + 1) {
    return 0;
  }
  return 1;
}
int main() {
  cin >> n >> s1 >> s2;
  for (int i = 1; i <= n; i++) cin >> p[i].a, p[i].id = i;
  sort(p + 1, p + 1 + n);
  int flag = 0;
  if (judge())
    flag = 1;
  else
    swap(s1, s2);
  if ((flag == 0) && judge()) flag = 2;
  if (flag == 0) {
    puts("No");
    return 0;
  }
  if (flag == 2) swap(v1, v2);
  puts("Yes");
  printf("%d %d\n", v1.size(), v2.size());
  for (int i = 0; i < v1.size(); i++) printf("%d ", v1[i]);
  puts("");
  for (int i = 0; i < v2.size(); i++) printf("%d ", v2[i]);
}
