#include <bits/stdc++.h>
using namespace std;
struct node {
  int val, ind;
} a[600010];
bool cmp(node a, node b) { return a.val < b.val; }
int main() {
  int n, s1, s2;
  scanf("%d%d%d", &n, &s1, &s2);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i].val), a[i].ind = i;
  sort(a + 1, a + n + 1, cmp);
  for (int i = 1; i <= n; i++) {
    int flag = 0;
    int num = s1 % a[i].val ? s1 / a[i].val + 1 : s1 / a[i].val;
    int j = i + num;
    if (j <= n) {
      if ((long long)a[j].val * (n - j + 1) >= s2) flag = 1;
      if (flag) {
        cout << "Yes" << endl;
        cout << num << ' ' << n - j + 1 << endl;
        for (int k = i; k < i + num; k++) cout << a[k].ind << ' ';
        cout << endl;
        for (int k = i + num; k <= n; k++) cout << a[k].ind << ' ';
        return 0;
      }
    }
    num = s2 % a[i].val ? s2 / a[i].val + 1 : s2 / a[i].val;
    j = i + num;
    if (j <= n) {
      if ((long long)a[j].val * (n - j + 1) >= s1) flag = 1;
      if (flag) {
        cout << "Yes" << endl;
        cout << n - j + 1 << ' ' << num << endl;
        for (int k = i + num; k <= n; k++) cout << a[k].ind << ' ';
        cout << endl;
        for (int k = i; k < i + num; k++) cout << a[k].ind << ' ';
        return 0;
      }
    }
  }
  cout << "No";
  return 0;
}
