#include <bits/stdc++.h>
using namespace std;
int n, x1, x2;
const int N = 3e5 + 5;
pair<int, int> a[N];
int tree[4 * N], dp[N];
void build(int i, int l, int r) {
  if (l == r) return void(tree[i] = dp[l]);
  int mid = (l + r) >> 1;
  build(i << 1, l, mid);
  build(i << 1 | 1, mid + 1, r);
  tree[i] = max(tree[i << 1], tree[i << 1 | 1]);
}
int get(int i, int l, int r, int a, int b) {
  if (l > b || r < a) return -1e5;
  if (l >= a && r <= b) return tree[i];
  int mid = (l + r) >> 1;
  return max(get(i << 1, l, mid, a, b), get(i << 1 | 1, mid + 1, r, a, b));
}
bool dp2[N];
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> x1 >> x2;
  for (int i = 0; i < n; i++) {
    cin >> a[i].first;
    a[i].second = i + 1;
  }
  sort(a, a + n);
  for (int i = 0; i < n; i++) {
    int y = x1 / a[i].first;
    if (x1 % a[i].first) y++;
    if (y > n - i)
      dp[i] = -1e8;
    else
      dp[i] = n - i - y;
  }
  for (int i = n - 1; i >= 0; i--) {
    dp2[i] = dp2[i + 1];
    if (dp[i] >= 0) dp2[i] |= 1;
  }
  build(1, 0, n - 1);
  for (int i = 0; i < n; i++) {
    int y = x2 / a[i].first;
    if (x2 % a[i].first) y++;
    if (y > n - i) continue;
    int z = y + i;
    if (dp2[z]) {
      cout << "Yes" << endl;
      vector<int> temp;
      for (int j = z; j < n; j++) {
        int f = x1 / a[j].first;
        if (x1 % a[j].first) f++;
        if (n - j >= f) {
          for (int k = j; k < j + f; k++) temp.push_back(a[k].second);
          break;
        }
      }
      cout << temp.size() << " ";
      cout << y << endl;
      for (int j = 0; j < temp.size(); j++) cout << temp[j] << " ";
      cout << endl;
      for (int j = i; j < z; j++) cout << a[j].second << " ";
      cout << endl;
      return 0;
    }
    if (i) {
      int ret = get(1, 0, n - 1, 0, i - 1);
      if (ret >= y) {
        cout << "Yes" << endl;
        vector<int> temp;
        for (int j = 0; j < i; j++) {
          int f = x1 / a[j].first;
          if (x1 % a[j].first) f++;
          if (f > n - j)
            ;
          else {
            int g = n - j - f;
            if (g >= y) {
              for (int k = j; k < n; k++) {
                if (k >= i && k < z) continue;
                temp.push_back(a[k].second);
              }
              break;
            }
          }
        }
        cout << temp.size() << " ";
        cout << y << endl;
        for (int j = 0; j < temp.size(); j++) cout << temp[j] << " ";
        cout << endl;
        for (int j = i; j < z; j++) cout << a[j].second << " ";
        cout << endl;
        return 0;
      }
    }
  }
  cout << "No" << endl;
  return 0;
}
