#include <bits/stdc++.h>
using namespace std;
int n, x1, x2;
long long int s[300005] = {0};
struct node {
  int inde;
  int capacity;
};
node units[300005] = {0};
bool compare(node a, node b) { return a.capacity > b.capacity; }
int erfen(int a, int b, int tmp) {
  if (a == b)
    return a;
  else {
    int mid = (a + b) >> 1;
    if (s[mid] >= tmp)
      return erfen(a, mid, tmp);
    else
      return erfen(mid + 1, b, tmp);
  }
}
int main() {
  scanf("%d%d%d", &n, &x1, &x2);
  for (int i = 0; i < n; ++i) {
    scanf("%d", &units[i].capacity);
    units[i].inde = i + 1;
  }
  sort(units, units + n, compare);
  for (int i = 1; i <= n; ++i) {
    s[i] = i * (long long int)units[i - 1].capacity;
  }
  for (int k = 0; k < n; ++k) {
    if (s[k] >= x1) {
      int tmp_one = k;
      for (int i = tmp_one + 1; i <= n; ++i) {
        if ((long long int)units[i - 1].capacity * (i - tmp_one) >= x2) {
          cout << "Yes" << endl;
          cout << tmp_one << ' ' << i - tmp_one << endl;
          for (int j = 0; j < tmp_one; ++j) cout << units[j].inde << ' ';
          cout << endl;
          for (int j = tmp_one; j < i; ++j) cout << units[j].inde << ' ';
          cout << endl;
          return 0;
        }
      }
      break;
    }
  }
  for (int k = 0; k < n; ++k) {
    if (s[k] >= x2) {
      int tmp_two = k;
      for (int i = tmp_two + 1; i <= n; ++i) {
        if ((long long int)units[i - 1].capacity * (i - tmp_two) >= x1) {
          cout << "Yes" << endl;
          cout << i - tmp_two << ' ' << tmp_two << endl;
          for (int j = tmp_two; j < i; ++j) cout << units[j].inde << ' ';
          cout << endl;
          for (int j = 0; j < tmp_two; ++j) cout << units[j].inde << ' ';
          cout << endl;
          return 0;
        }
      }
      break;
    }
  }
  cout << "No" << endl;
  return 0;
}
