#include <bits/stdc++.h>
using namespace std;
const double PI = acos(-1.0);
const int INF = 0x3f3f3f3f;
const long long LINF = 0x3f3f3f3f3f3f3f3f;
const int N = 3e5 + 9;
const int shift = 1e3 + 9;
const double Eps = 1e-7;
int n, x1, x2, p;
vector<int> v[3];
bool flag;
struct node {
  int val, id;
} a[N];
bool cmp(node a, node b) { return a.val < b.val; }
int check(int mid) {
  int t = ceil(1.0 * x1 / mid);
  if (t <= a[p - mid + 1].val) return 0;
  return 1;
}
int main(void) {
  if (fopen("in", "r") != NULL) {
    freopen("in", "r", stdin);
    freopen("out", "w", stdout);
  }
  while (cin >> n >> x1 >> x2) {
    for (int i = 1; i <= n; i++) {
      scanf("%d", &a[i].val);
      a[i].id = i;
    }
    sort(a + 1, a + n + 1, cmp);
    flag = false;
    v[1].clear();
    v[2].clear();
    for (int i = 1; i < n; i++) {
      int t = ceil(1.0 * x2 / i);
      p = n - i;
      if (a[p + 1].val >= t) {
        int l;
        for (int i = p; i >= 1; i--) {
          if (check(i) == 0) {
            l = i;
            flag = true;
            break;
          }
        }
        if (flag) {
          printf("Yes\n%d %d\n", l, n - p);
          for (int i = p; i >= p - l + 1; i--)
            printf("%d%c", a[i].id, i == p - l + 1 ? '\n' : ' ');
          for (int i = p + 1; i <= n; i++)
            printf("%d%c", a[i].id, i == n ? '\n' : ' ');
        }
        break;
      }
    }
    if (flag) continue;
    swap(x1, x2);
    for (int i = 1; i < n; i++) {
      int t = ceil(1.0 * x2 / i);
      p = n - i;
      if (a[p + 1].val >= t) {
        int l;
        for (int i = p; i >= 1; i--) {
          if (check(i) == 0) {
            l = i;
            flag = true;
            break;
          }
        }
        if (flag) {
          printf("Yes\n%d %d\n", n - p, l);
          for (int i = p + 1; i <= n; i++)
            printf("%d%c", a[i].id, i == n ? '\n' : ' ');
          for (int i = p; i >= p - l + 1; i--)
            printf("%d%c", a[i].id, i == p - l + 1 ? '\n' : ' ');
        }
        break;
      }
    }
    if (!flag) printf("No\n");
  }
  return 0;
}
