#include <bits/stdc++.h>
using namespace std;
const int N = 3e5 + 99;
struct eg {
  int v, id;
} a[N];
int n, x1, x2, n1[N], n2[N], minl = 998244353, ans1[N], ans2[N];
bool bl[N];
bool cmp(eg a, eg b) { return a.v < b.v; }
int main() {
  scanf("%d%d%d", &n, &x1, &x2);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i].v), a[i].id = i;
  sort(a + 1, a + n + 1, cmp);
  for (int i = 1; i <= n; i++)
    n1[i] = (x1 - 1) / a[i].v + 1, n2[i] = (x2 - 1) / a[i].v + 1;
  for (int i = n; i >= 1; i--) {
    if (minl + n1[i] <= n - i + 1) {
      printf("Yes\n%d %d\n", n1[i], minl);
      int len1 = 0, len2 = 0;
      for (int j = i + 1; j <= n; j++)
        if (n2[j] == minl) {
          for (int k = 1; k <= minl; k++)
            bl[j + k - 1] = 2, ans2[++len2] = j + k - 1;
          break;
        }
      for (int j = i; j <= n && len1 < n1[i]; j++)
        if (!bl[j]) {
          bl[j] = 1;
          ans1[++len1] = j;
        }
      for (int j = 1; j <= len1; j++) printf("%d ", a[ans1[j]].id);
      printf("\n");
      for (int j = 1; j <= len2; j++) printf("%d ", a[ans2[j]].id);
      printf("\n");
      return 0;
    }
    if (n2[i] <= n - i + 1) minl = min(minl, n2[i]);
  }
  memset(bl, 0, sizeof bl);
  minl = 998244353;
  for (int i = n; i >= 1; i--) {
    if (minl + n2[i] <= n - i + 1) {
      printf("Yes\n%d %d\n", minl, n2[i]);
      int len1 = 0, len2 = 0;
      for (int j = i + 1; j <= n; j++)
        if (n1[j] == minl) {
          for (int k = 1; k <= minl; k++)
            bl[j + k - 1] = 1, ans1[++len1] = j + k - 1;
          break;
        }
      for (int j = i; j <= n && len2 < n2[i]; j++)
        if (!bl[j]) {
          bl[j] = 2;
          ans2[++len2] = j;
        }
      for (int j = 1; j <= len1; j++) printf("%d ", a[ans1[j]].id);
      printf("\n");
      for (int j = 1; j <= len2; j++) printf("%d ", a[ans2[j]].id);
      printf("\n");
      return 0;
    }
    if (n1[i] <= n - i + 1) minl = min(minl, n1[i]);
  }
  printf("No");
}
