#include <bits/stdc++.h>
using namespace std;
ifstream in("input.txt");
ofstream out("output.txt");
const long long MAXL = 1e18;
const int N = 10005000;
const int MAXN = 1e9 + 7;
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  long long n, x1, x2;
  cin >> n >> x1 >> x2;
  vector<pair<long long, long long> > v(n);
  for (int i = 0; i < n; ++i) {
    cin >> v[i].first;
    v[i].second = i + 1;
  }
  sort(v.rbegin(), v.rend());
  bool ok = true;
  int cnt1 = 0;
  long long need;
  while (true) {
    cnt1++;
    if (cnt1 > n) {
      ok = false;
      break;
    }
    need = x1 / cnt1 + bool(x1 % cnt1);
    if (need <= v[cnt1 - 1].first) {
      break;
    }
  }
  int cnt2 = 0;
  while (true) {
    cnt2++;
    if (cnt1 + cnt2 > n) {
      ok = false;
      break;
    }
    need = x2 / cnt2 + bool(x2 % cnt2);
    if (need <= v[cnt1 + cnt2 - 1].first) {
      break;
    }
  }
  if (ok) {
    cout << "Yes\n";
    cout << cnt1 << " " << cnt2 << "\n";
    for (int i = 0; i < cnt1; ++i) {
      cout << v[i].second << " ";
    }
    cout << "\n";
    for (int i = cnt1; i < cnt1 + cnt2; ++i) {
      cout << v[i].second << " ";
    }
    cout << "\n";
    return 0;
  }
  swap(x1, x2);
  ok = true;
  cnt1 = 0;
  need;
  while (true) {
    cnt1++;
    if (cnt1 > n) {
      ok = false;
      break;
    }
    need = x1 / cnt1 + bool(x1 % cnt1);
    if (need <= v[cnt1 - 1].first) {
      break;
    }
  }
  cnt2 = 0;
  while (true) {
    cnt2++;
    if (cnt1 + cnt2 > n) {
      ok = false;
      break;
    }
    need = x2 / cnt2 + bool(x2 % cnt2);
    if (need <= v[cnt1 + cnt2 - 1].first) {
      break;
    }
  }
  if (ok) {
    cout << "Yes\n";
    cout << cnt2 << " " << cnt1 << "\n";
    for (int i = cnt1; i < cnt1 + cnt2; ++i) {
      cout << v[i].second << " ";
    }
    cout << "\n";
    for (int i = 0; i < cnt1; ++i) {
      cout << v[i].second << " ";
    }
    cout << "\n";
    return 0;
  }
  cout << "No\n";
  return 0;
}
