#include <bits/stdc++.h>
using namespace std;
namespace output {
void __(short x) { cout << x; }
void __(unsigned x) { cout << x; }
void __(int x) { cout << x; }
void __(long long x) { cout << x; }
void __(unsigned long long x) { cout << x; }
void __(double x) { cout << x; }
void __(long double x) { cout << x; }
void __(char x) { cout << x; }
void __(const char* x) { cout << x; }
void __(const string& x) { cout << x; }
void __(bool x) { cout << (x ? "true" : "false"); }
template <class S, class T>
void __(const pair<S, T>& x) {
  __(1 ? "(" : ""), __(x.first), __(1 ? ", " : " "), __(x.second),
      __(1 ? ")" : "");
}
template <class T>
void __(const vector<T>& x) {
  __(1 ? "{" : "");
  bool _ = 0;
  for (const auto& v : x) __(_ ? 1 ? ", " : " " : ""), __(v), _ = 1;
  __(1 ? "}" : "");
}
template <class T>
void __(const set<T>& x) {
  __(1 ? "{" : "");
  bool _ = 0;
  for (const auto& v : x) __(_ ? 1 ? ", " : " " : ""), __(v), _ = 1;
  __(1 ? "}" : "");
}
template <class T>
void __(const multiset<T>& x) {
  __(1 ? "{" : "");
  bool _ = 0;
  for (const auto& v : x) __(_ ? 1 ? ", " : " " : ""), __(v), _ = 1;
  __(1 ? "}" : "");
}
template <class S, class T>
void __(const map<S, T>& x) {
  __(1 ? "{" : "");
  bool _ = 0;
  for (const auto& v : x) __(_ ? 1 ? ", " : " " : ""), __(v), _ = 1;
  __(1 ? "}" : "");
}
void pr() { cout << "\n"; }
template <class S, class... T>
void pr(const S& a, const T&... b) {
  __(a);
  if (sizeof...(b)) __(' ');
  pr(b...);
}
}  // namespace output
using namespace output;
const int MN = 3e5 + 5;
int n, a, b, i, j, p, ok[MN], f;
pair<int, int> arr[MN];
vector<int> c, d;
void go(int id) {
  p = -1;
  for (i = 1; i <= n; i++) {
    if (1LL * arr[i].first * i >= a) {
      p = i;
      break;
    }
  }
  if (p != -1) {
    for (i = p + 1; i <= n; i++) {
      if (1LL * arr[i].first * (i - p) >= b) {
        f = id;
        c.clear();
        d.clear();
        for (int j = 1; j <= p; j++) c.push_back(arr[j].second);
        for (int j = p + 1; j <= i; j++) d.push_back(arr[j].second);
        return;
      }
    }
  }
}
int main() {
  scanf("%d%d%d", &n, &a, &b);
  for (i = 1; i <= n; i++) {
    scanf("%d", &arr[i].first);
    arr[i].second = i;
  }
  sort(arr + 1, arr + n + 1,
       [](pair<int, int> i, pair<int, int> j) { return i.first > j.first; });
  go(1);
  swap(a, b);
  go(2);
  if (f) {
    printf("Yes\n");
    if (f == 2) swap(c, d);
    printf("%d %d\n", c.size(), d.size());
    for (auto v : c) printf("%d ", v);
    printf("\n");
    for (auto v : d) printf("%d ", v);
    printf("\n");
  } else
    printf("No\n");
  return 0;
}
