#include <bits/stdc++.h>
using namespace std;
const int MAXN = 300000 + 7;
struct node {
  int id;
  long long int w;
} a[MAXN];
bool cmp(node b, node c) { return b.w < c.w; }
long long int sum[MAXN];
int n, x1, x2;
int main() {
  scanf("%d%d%d", &n, &x1, &x2);
  for (int i = 1; i <= n; i++) scanf("%lld", &a[i].w), a[i].id = i;
  sort(a + 1, a + n + 1, cmp);
  for (int i = 1; i <= n; i++) sum[i] = sum[i - 1] + a[i].w;
  bool flag = false;
  for (int i = 1; i <= n; i++) {
    int q = x1 / i;
    if (x1 % i != 0) q++;
    int l = 1, r = n, ans = 1;
    while (r >= l) {
      int mid = (l + r) / 2;
      if (a[mid].w >= q)
        r = mid - 1, ans = mid;
      else
        l = mid + 1;
    }
    if (sum[ans + i - 1] - sum[ans - 1] < x1 || ans + i - 1 == n) continue;
    int p = x2 / (n - (i + ans - 1));
    if (x2 % (n - (i + ans - 1)) != 0) p++;
    if (sum[n] - sum[i + ans - 1] >= x2 && p <= a[ans + i].w) {
      printf("Yes\n%d %d\n", i, n - (i + ans - 1));
      for (int j = ans; j <= i + ans - 1; j++) printf("%d ", a[j].id);
      printf("\n");
      for (int j = i + ans; j <= n; j++) printf("%d ", a[j].id);
      printf("\n");
      flag = true;
      break;
    }
  }
  if (!flag)
    for (int i = 1; i <= n; i++) {
      int q = x2 / i;
      if (x2 % i != 0) q++;
      int l = 1, r = n, ans = 1;
      while (r >= l) {
        int mid = (l + r) / 2;
        if (a[mid].w >= q)
          r = mid - 1, ans = mid;
        else
          l = mid + 1;
      }
      if (sum[ans + i - 1] - sum[ans - 1] < x2 || ans + i - 1 == n) continue;
      int p = x1 / (n - (i + ans - 1));
      if (x1 % (n - (i + ans - 1)) != 0) p++;
      if (sum[n] - sum[i + ans - 1] >= x1 && p <= a[ans + i].w) {
        printf("Yes\n%d %d\n", n - (i + ans - 1), i);
        for (int j = i + ans; j <= n; j++) printf("%d ", a[j].id);
        printf("\n");
        for (int j = ans; j <= i + ans - 1; j++) printf("%d ", a[j].id);
        printf("\n");
        flag = true;
        break;
      }
    }
  if (!flag) printf("No\n");
}
