#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("sse4")
constexpr int mod = 1000000007;
constexpr int inf = 0x3f3f3f3f;
inline long long powmod(long long a, long long b) {
  long long res = 1;
  a %= mod;
  assert(b >= 0);
  for (; b; b >>= 1)
    if (b & 1) {
      res = (res * a) % mod;
      a = (a * a) % mod;
    }
  return res;
}
template <class num>
inline void rd(num& x) {
  char c;
  while (isspace(c = getchar()))
    ;
  bool neg = false;
  if (!isdigit(c))
    neg = (c == '-'), x = 0;
  else
    x = c - '0';
  while (isdigit(c = getchar())) {
    x = (x << 3) + (x << 1) + c - '0';
  }
  if (neg) x = -x;
}
const int ms = 3e5;
vector<pair<int, int> > memo;
int n, k, x1, x2;
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> x1 >> x2;
  for (int(i) = (0); (i) < (n); ++(i)) {
    cin >> k;
    memo.push_back({k, i});
  }
  bool chg = false;
  if (x1 < x2) {
    swap(x1, x2);
    chg = true;
  }
  sort((memo).begin(), (memo).end());
  for (int(i) = (1); (i) < (n); ++(i)) {
    int need = x1 / i + ((x1 % i > 0) ? 1 : 0);
    int idx =
        lower_bound((memo).begin(), (memo).end(), pair<int, int>{need, -1}) -
        memo.begin();
    if (n - idx >= i) {
      int start = idx;
      int end = idx + i - 1;
      long long qnt = n - i;
      int fst;
      if (start == 0)
        fst = end + 1;
      else
        fst = 0;
      long long menor = memo[fst].second;
      int beginAns2 = fst;
      bool can = false;
      for (int j = fst + 1; j < n; j++) {
        if (j >= start && j <= end)
          continue;
        else {
          menor = memo[j].first;
          qnt--;
          if (qnt * menor >= (1ll) * x2) {
            can = true;
            beginAns2 = j;
            break;
          }
        }
      }
      if (can) {
        vector<int> a1, a2;
        for (int i = start; i <= end; ++i) a1.push_back(memo[i].second + 1);
        for (int j = beginAns2; j < n; ++j) {
          if (j >= start && j <= end)
            continue;
          else
            a2.push_back(memo[j].second + 1);
        }
        if (chg) {
          cout << "Yes" << endl;
          cout << ((int)(a2).size()) << " " << ((int)(a1).size()) << endl;
          for (const int& x : a2) cout << x << " ";
          cout << endl;
          for (const int& x : a1) cout << x << " ";
          cout << endl;
        } else {
          cout << "Yes" << endl;
          cout << ((int)(a1).size()) << " " << ((int)(a2).size()) << endl;
          for (const int& x : a1) cout << x << " ";
          cout << endl;
          for (const int& x : a2) cout << x << " ";
          cout << endl;
        }
        return 0;
      }
    }
  }
  cout << "No" << endl;
  return 0;
}
