#include <bits/stdc++.h>
using namespace std;
void smain();
int main() {
  ios::sync_with_stdio(false);
  smain();
  return 0;
}
const int maxn = 300000 + 10;
int num[maxn];
int num1[maxn], num2[maxn];
int tot = 1;
int min1[maxn], min2[maxn];
int la1[maxn], la2[maxn];
int flo(int a, int b) {
  int ans = a / b;
  if (a % b != 0) ans++;
  return ans;
}
const int INF = 2e9;
int a1[maxn], a2[maxn];
int flag[maxn];
bool cal(int n, int *Min, int *La, int *This, int *a1, int *a2) {
  bool flagg = false;
  int A1, A2;
  for (int i = (2); i <= (n); ++i) {
    if (Min[i - 1] == INF || This[i] == INF) continue;
    if (Min[i - 1] + This[i] <= i) {
      flagg = true;
      A1 = La[i - 1];
      A2 = i;
      break;
    }
  }
  if (!flagg) return false;
  a1[0] = Min[A1];
  a2[0] = This[A2];
  int i = 1, j = 1;
  for (j = 1; j < a1[0]; ++i) {
    a1[j] = flag[i];
    ++j;
  }
  a1[j] = flag[A1];
  for (j = 1; j < a2[0]; ++i) {
    if (i == A1) continue;
    a2[j] = flag[i];
    ++j;
  }
  a2[j] = flag[A2];
  return true;
}
struct Node {
  int o, flag;
} node[maxn];
bool cmp(Node a, Node b) { return a.o > b.o; }
void smain() {
  int n, x1, x2;
  cin >> n >> x1 >> x2;
  for (int i = (1); i <= (n); ++i) cin >> num[i];
  for (int i = (1); i <= (n); ++i) node[i].o = num[i], node[i].flag = i;
  sort(node + 1, node + n + 1, cmp);
  for (int i = (1); i <= (n); ++i) num[i] = node[i].o, flag[i] = node[i].flag;
  int tmp;
  for (int i = (1); i <= (n); ++i) {
    tmp = flo(x1, num[i]);
    if (tmp > i) tmp = INF;
    min1[i] = num1[i] = tmp;
    tmp = flo(x2, num[i]);
    if (tmp > i) tmp = INF;
    min2[i] = num2[i] = tmp;
    la1[i] = la2[i] = i;
  }
  for (int i = (2); i <= (n); ++i) {
    if (min1[i - 1] <= min1[i]) {
      min1[i] = min1[i - 1];
      la1[i] = la1[i - 1];
    }
    if (min2[i - 1] <= min2[i]) {
      min2[i] = min2[i - 1];
      la2[i] = la2[i - 1];
    }
  }
  int ans1 = -1, ans2 = -1;
  if (cal(n, min1, la1, num2, a1, a2)) {
  } else if (cal(n, min2, la2, num1, a2, a1)) {
  } else {
    cout << "No" << endl;
    return;
  }
  cout << "Yes" << endl;
  cout << a1[0] << " " << a2[0] << endl;
  for (int i = 1; a1[i] != 0; ++i) cout << a1[i] << " ";
  cout << endl;
  for (int i = 1; a2[i] != 0; ++i) cout << a2[i] << " ";
}
