#include <bits/stdc++.h>
using namespace std;
const int MOD = 786433, MAXN = 1 << 18, LOGN = 18, MAXM = 5005;
inline void S(int& n) {
  n = 0;
  int ch = getchar();
  int sign = 1;
  while (ch < '0' || ch > '9') {
    if (ch == '-') sign = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    n = (n << 3) + (n << 1) + ch - '0', ch = getchar();
  }
  n = n * sign;
}
const int SHIFT = 30, ETF = MOD - 1, LIM = (int)1e9;
const long long int INF = (long long int)1e18 + 1;
const double PI = (double)acos(-1), EPSILON = 1e-10;
vector<int> resources;
vector<pair<int, int> > info;
int n, x1, x2;
int findResourcesNeed(int req, int x) {
  int p = x / req;
  if (x % req) p++;
  return p;
}
void solve() {
  for (int turn = 0; turn < 2; turn++) {
    int k2 = -1;
    for (int i = 1; i < n + 1; i++) {
      int mnres = findResourcesNeed(i, x2);
      if (resources[n - i] >= mnres) {
        k2 = i;
        break;
      }
    }
    if (k2 != -1) {
      int val = resources[n - k2];
      for (int i = (x1 + val - 1) / val; i < n + 1; i++) {
        int mnres = findResourcesNeed(i, x1);
        int idx = lower_bound(resources.begin(), resources.end(), mnres) -
                  resources.begin();
        int last = idx + i - 1;
        int first = n - k2;
        int k1 = i;
        if (last < first) {
          vector<vector<int> > res(2);
          for (int j = 0; j < k1; j++) {
            res[0 ^ turn].push_back(info[idx + j].second);
          }
          for (int j = 0; j < k2; j++) {
            res[1 ^ turn].push_back(info[n - 1 - j].second);
          }
          printf("Yes\n");
          printf("%d %d\n", res[0].size(), res[1].size());
          for (int pp = 0; pp < 2; pp++) {
            for (int j = 0; j < res[pp].size(); j++) {
              printf("%d ", res[pp][j] + 1);
            }
            printf("\n");
          }
          return;
        }
      }
    }
    swap(x1, x2);
  }
  printf("No\n");
}
int main() {
  S(n);
  S(x1);
  S(x2);
  resources.resize(n);
  info.resize(n);
  for (int i = 0; i < n; i++) {
    S(resources[i]);
    info[i].first = resources[i];
    info[i].second = i;
  }
  sort(resources.begin(), resources.end());
  sort(info.begin(), info.end());
  solve();
  return 0;
}
