/*-----------------------------------------------
*	Filename: D.cpp
*	Author: zhuyutian
*	Date: 2018.04.29
-----------------------------------------------*/
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <cstdio>
#include <cstring>
using namespace std;

#define ll long long
#define pii pair<int, int>
#define mpii(a, b) make_pair(a, b)
const int maxn = 100005;
const int INF = 1 << 30;
const double eps = 1e-6;
const int mod = 1000000007;

int n,x[2];
struct Node{
	int c,i;
	bool operator<(const Node& rhs) const{
		return c > rhs.c;
	}
}A[maxn * 3];
vector<int> v[2];

bool solve(int t){
	int l,r;
	v[0].clear(); v[1].clear();
	for(l = 0; l < n; l++){
		v[t].push_back(A[l].i);
		if(1ll * (l + 1) * A[l].c >= x[t])
			break;
	}
	bool ok = false;
	for(r = l + 1; r < n; r++){
		v[t^1].push_back(A[r].i);
		if(1ll * (l + 1) * A[r].c >= x[t ^ 1]){
			ok = true;
			break;
		}
	}
	if(!ok) return false;
	puts("Yes");
	printf("%d %d\n",v[0].size(),v[1].size());
	for(int i = 0; i < 2; i++){
		for(int j = 0; j < v[i].size(); j++)
			printf("%d ",v[i][j]);
		printf("\n");
	}
	return true;
}

int main(){
	//freopen("in.txt","r",stdin);
	//freopen("out.txt","w",stdout);
	scanf("%d%d%d",&n,&x[0],&x[1]);
	for(int i = 0; i < n; i++){
		scanf("%d",&A[i].c);
		A[i].i = i + 1;
	}
	sort(A, A + n);
	if(solve(0)) return 0;
	if(solve(1)) return 0;
	puts("No");
	return 0;
}


/*-----------------------------------------------
*	Filename: D.cpp
*	Author: zhuyutian
*	Date: 2018.04.29
-----------------------------------------------*/
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <cstdio>
#include <cstring>
using namespace std;

#define ll long long
#define pii pair<int, int>
#define mpii(a, b) make_pair(a, b)
const int maxn = 100005;
const int INF = 1 << 30;
const double eps = 1e-6;
const int mod = 1000000007;

int n,x1,x2;
struct Node{
	int c,i;
	bool operator<(const Node& rhs) const{
		return c < rhs.c;
	}
}A[maxn * 3];
int a[maxn * 3],vis[maxn * 3];
vector<int> v[2];

int main(){
	//freopen("in.txt","r",stdin);
	//freopen("out.txt","w",stdout);
	scanf("%d%d%d",&n,&x1,&x2);
	for(int i = 0; i < n; i++){
		scanf("%d",&A[i].c);
		A[i].i = i + 1;
	}
	sort(A, A + n);
	for(int i = 0; i < n; i++) a[i] = A[i].c;
	bool ok = false;
	for(int i = 1; i < n; i++){
		int l1 = ceil(1.0 * x1 / i);
		int p1 = lower_bound(a,a + n,l1) - a;
		if(n - p1 < i) continue;
		int l = 1,r = n - i;
		while(l < r){
			int mid = (l + r) >> 1;
			int l2 = ceil(1.0 * x2 / mid);
			int p2 = lower_bound(a,a + n,l2) - a;
			if(n - p2 < mid) { l = mid + 1; continue; }
			int cnt = n - min(p1,p2);
			if(cnt < i + mid) l = mid + 1;
			else r = mid;
		}
		int l2 = ceil(1.0 * x2 / l);
		int p2 = lower_bound(a,a + n,l2) - a;
		if(n - p2 < l) continue;
		if(n - min(p1,p2) >= i + l){
			for(int j = p1; j < n && v[0].size() < i; j++)
				if(j != p2){
					vis[j] = 1;
					v[0].push_back(A[j].i);
				}
			for(int j = p2; j < n; j++)
				if(!vis[j])
					v[1].push_back(A[j].i);
			ok = true;
			break;
		}
	}
	if(!ok) { puts("No"); return 0; }
	puts("Yes");
	printf("%d %d\n",v[0].size(),v[1].size());
	for(int i = 0; i < 2; i++){
		sort(v[i].begin(),v[i].end());
		for(int j = 0; j < v[i].size(); j++)
			printf("%d ",v[i][j]);
		printf("\n");
	}
	return 0;
}


/*input
5 12 20
7 8 4 11 9
*/
#include <iostream>
#include <map>
#include <iomanip>
#include <vector>
#include <set>
#include <stdio.h>
#include <stack>
#include <math.h>
#include <string>
#include <algorithm>
#include <bitset>
#include <functional>
#include <stdlib.h>
#include <list>
#include <queue>
#include <unordered_set>
#include <unordered_map>
#include <deque>
#include <complex>

#define _USE_MATH_DEFINES
#define pii pair<int, int>
#define ll long long
#define ull unsigned long long
#define pll pair<ll, ll>
#define ld long double
#define X first
#define Y second
#define INF9  1000000000
#define INF18 1000000000000000000
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define pb(x) push_back(x)
#define DEB(x) cout << #x" = " << x;
#define DEB2(x, y) DEB(x);DEB(y)
#define qrt(x) (x) * (x)
const double PI = acos(-1.0);

using namespace std;

template<typename T1, typename T2>
istream& operator >> (istream& is, pair<T1, T2>& v){
	is >> v.X >> v.Y;
	return is;
}
template<typename T1, typename T2>
ostream& operator << (ostream& os, pair<T1, T2>& v){
	os << "{";
	os << v.X << ", " << v.Y;
	os << "}";
	return os;
}
template<typename T1, typename T2>
ostream& operator << (ostream& os, map<T1, T2>& v){
	os << "[";
	for (auto a : v)
	{
		os << a << ' ';
	}
	os << "]" << endl;
	return os;
}

template<typename T>
istream& operator >> (istream& is, vector<T>& v){
	for(int i = 0; i < v.size(); ++i){
		is >> v[i];
	}
	return is;
}
template<typename T>
ostream& operator << (ostream& os, vector<T>& v){
	os << "[";
	for(int i = 0; i < v.size(); ++i){
		os << v[i];
		if(i != v.size() - 1) os << " ";
	}
	os << "]" << endl;
	return os;
}
template<typename T>
ostream& operator << (ostream& os, deque<T>& v){
	os << "[";
	for(int i = 0; i < v.size(); ++i){
		os << v[i];
		if(i != v.size() - 1) os << " ";
	}
	os << "]" << endl;
	return os;
}
template<typename T>
ostream& operator << (ostream& os, set<T>& v){
	os << "[";
	int i = 0;
	for(auto a : v){
		os << a;
		if(i != v.size() - 1) os << " ";
	}
	os << "]" << endl;
	return os;
}

vector<pair<ll, int> > v;
vector<int> was;

int dfs(ll s, int lp, int rr)
{
	if (rr < 0)
	{
		return -1;
	}

	int l = lp, r = rr;
	while (r > l)
	{
		int mid = (r + l + 1) >> 1;

		if (v[mid].X * (rr - mid + 1) >= s && was[mid])
		{
			l = mid;
		}
		else
		{
			r = mid - 1;
		}
	}

	return v[l].X * (rr - l + 1) >= s && was[l] ? l : -1;
}

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);

	ll n, x1, x2;

	cin >> n >> x1 >> x2;

	bool flip = false;

	if (x1 < x2)
	{
		flip = true;
		swap(x1, x2);
	}

	v.resize(n);
	was.resize(n, 1);

	for (int i = 0; i < v.size(); ++i)
	{
		cin >> v[i].X;

		v[i].Y = i;
	}

	sort(all(v));

	// cout << v << endl;

	while (true)
	{
		int fans = dfs(x1, 0, n - 1);

		if (fans == -1)
		{
			break;
		}

		int sans = dfs(x2, 0, fans - 1);

		// cout << fans << ' ' << sans << endl;

		if (sans == -1)
		{
			was[fans] = 0;
			continue;
		}

		cout << "Yes" << endl;

		if (!flip)
		{
			cout << n - fans << ' ' << fans - sans << endl;

			for (int i = fans; i < n; ++i)
			{
				cout << v[i].Y + 1 << ' ';
			}
			cout << endl;

			for (int i = sans; i < fans; ++i)
			{
				cout << v[i].Y + 1 << ' ';
			}
			cout << endl;
		}
		else
		{
			cout << fans - sans << ' ' << n - fans << endl;

			for (int i = sans; i < fans; ++i)
			{
				cout << v[i].Y + 1 << ' ';
			}
			cout << endl;

			for (int i = fans; i < n; ++i)
			{
				cout << v[i].Y + 1 << ' ';
			}
			cout << endl;
		}

		break;
	}

	swap(x1, x2);

	flip = !flip;
	was.clear();
	was.resize(n, 1);

	while (true)
	{
		int fans = dfs(x1, 0, n - 1);

		if (fans == -1)
		{
			cout << "No" << endl;
			break;
		}

		int sans = dfs(x2, 0, fans - 1);

		// cout << fans << ' ' << sans << endl;

		if (sans == -1)
		{
			was[fans] = 0;
			continue;
		}

		cout << "Yes" << endl;

		if (!flip)
		{
			cout << n - fans << ' ' << fans - sans << endl;

			for (int i = fans; i < n; ++i)
			{
				cout << v[i].Y + 1 << ' ';
			}
			cout << endl;

			for (int i = sans; i < fans; ++i)
			{
				cout << v[i].Y + 1 << ' ';
			}
			cout << endl;
		}
		else
		{
			cout << fans - sans << ' ' << n - fans << endl;

			for (int i = sans; i < fans; ++i)
			{
				cout << v[i].Y + 1 << ' ';
			}
			cout << endl;

			for (int i = fans; i < n; ++i)
			{
				cout << v[i].Y + 1 << ' ';
			}
			cout << endl;
		}

		break;
	}

	return 0;
}


/*input
4 20 32
21 11 11 12
*/
#include <iostream>
#include <map>
#include <iomanip>
#include <vector>
#include <set>
#include <stdio.h>
#include <stack>
#include <math.h>
#include <string>
#include <algorithm>
#include <bitset>
#include <functional>
#include <stdlib.h>
#include <list>
#include <queue>
#include <unordered_set>
#include <unordered_map>
#include <deque>
#include <complex>

#define _USE_MATH_DEFINES
#define pii pair<int, int>
#define ll long long
#define ull unsigned long long
#define pll pair<ll, ll>
#define ld long double
#define X first
#define Y second
#define INF9  1000000000
#define INF18 1000000000000000000
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define pb(x) push_back(x)
#define DEB(x) cout << #x" = " << x;
#define DEB2(x, y) DEB(x);DEB(y)
#define qrt(x) (x) * (x)
const double PI = acos(-1.0);

using namespace std;

template<typename T1, typename T2>
istream& operator >> (istream& is, pair<T1, T2>& v){
    is >> v.X >> v.Y;
    return is;
}
template<typename T1, typename T2>
ostream& operator << (ostream& os, pair<T1, T2>& v){
    os << "{";
    os << v.X << ", " << v.Y;
    os << "}";
    return os;
}
template<typename T1, typename T2>
ostream& operator << (ostream& os, map<T1, T2>& v){
    os << "[";
    for (auto a : v)
    {
        os << a << ' ';
    }
    os << "]" << endl;
    return os;
}

template<typename T>
istream& operator >> (istream& is, vector<T>& v){
    for(int i = 0; i < v.size(); ++i){
        is >> v[i];
    }
    return is;
}
template<typename T>
ostream& operator << (ostream& os, vector<T>& v){
    os << "[";
    for(int i = 0; i < v.size(); ++i){
        os << v[i];
        if(i != v.size() - 1) os << " ";
    }
    os << "]" << endl;
    return os;
}
template<typename T>
ostream& operator << (ostream& os, deque<T>& v){
    os << "[";
    for(int i = 0; i < v.size(); ++i){
        os << v[i];
        if(i != v.size() - 1) os << " ";
    }
    os << "]" << endl;
    return os;
}
template<typename T>
ostream& operator << (ostream& os, set<T>& v){
    os << "[";
    int i = 0;
    for(auto a : v){
        os << a;
        if(i != v.size() - 1) os << " ";
    }
    os << "]" << endl;
    return os;
}

vector<pair<ll, int> > v;
vector<int> was;

int dfs(ll s, int lp, int rr)
{
    if (rr < 0)
    {
        return -1;
    }

    ll l = lp, r = rr;
    while (r - l > 1)
    {
        ll mid = (r + l) >> 1;

        if (v[mid].X * (rr - mid + 1) >= s && was[mid])
        {
            l = mid;
        }
        else
        {
            r = mid - 1;
        }
    }

    if (v[r].X * (rr - r + 1) >= s && was[r])
    {
        l = r;
    }

    return v[l].X * (rr - l + 1) >= s && was[l] ? l : -1;
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    ll n, x1, x2;

    cin >> n >> x1 >> x2;

    bool flip = false;

    if (x1 < x2)
    {
        flip = true;
        swap(x1, x2);
    }

    v.resize(n);
    was.resize(n, 1);

    for (int i = 0; i < v.size(); ++i)
    {
        cin >> v[i].X;

        v[i].Y = i;
    }

    sort(all(v));

    // cout << v << endl;

    while (true)
    {
        int fans = dfs(x1, 0, n - 1);

        if (fans == -1)
        {
            break;
        }

        int sans = dfs(x2, 0, fans - 1);

        // cout << fans << ' ' << sans << endl;

        if (sans == -1)
        {
            was[fans] = 0;
            continue;
        }

        cout << "Yes" << endl;

        if (!flip)
        {
            cout << n - fans << ' ' << fans - sans << endl;

            for (int i = fans; i < n; ++i)
            {
                cout << v[i].Y + 1 << ' ';
            }
            cout << endl;

            for (int i = sans; i < fans; ++i)
            {
                cout << v[i].Y + 1 << ' ';
            }
            cout << endl;
        }
        else
        {
            cout << fans - sans << ' ' << n - fans << endl;

            for (int i = sans; i < fans; ++i)
            {
                cout << v[i].Y + 1 << ' ';
            }
            cout << endl;

            for (int i = fans; i < n; ++i)
            {
                cout << v[i].Y + 1 << ' ';
            }
            cout << endl;
        }

        return 0;
    }

    swap(x1, x2);

    flip = !flip;
    was.clear();
    was.resize(n, 1);

    while (true)
    {
        int fans = dfs(x1, 0, n - 1);

        if (fans == -1)
        {
            cout << "No" << endl;
            break;
        }

        int sans = dfs(x2, 0, fans - 1);

        // cout << fans << ' ' << sans << endl;

        if (sans == -1)
        {
            was[fans] = 0;
            continue;
        }

        cout << "Yes" << endl;

        if (!flip)
        {
            cout << n - fans << ' ' << fans - sans << endl;

            for (int i = fans; i < n; ++i)
            {
                cout << v[i].Y + 1 << ' ';
            }
            cout << endl;

            for (int i = sans; i < fans; ++i)
            {
                cout << v[i].Y + 1 << ' ';
            }
            cout << endl;
        }
        else
        {
            cout << fans - sans << ' ' << n - fans << endl;

            for (int i = sans; i < fans; ++i)
            {
                cout << v[i].Y + 1 << ' ';
            }
            cout << endl;

            for (int i = fans; i < n; ++i)
            {
                cout << v[i].Y + 1 << ' ';
            }
            cout << endl;
        }

        break;
    }

    return 0;
}


/*input
6 8 16
3 5 2 9 8 7
*/
#include <iostream>
#include <map>
#include <iomanip>
#include <vector>
#include <set>
#include <stdio.h>
#include <stack>
#include <math.h>
#include <string>
#include <algorithm>
#include <bitset>
#include <functional>
#include <stdlib.h>
#include <list>
#include <queue>
#include <unordered_set>
#include <unordered_map>
#include <deque>
#include <complex>

#define _USE_MATH_DEFINES
#define pii pair<int, int>
#define ll long long
#define ull unsigned long long
#define pll pair<ll, ll>
#define ld long double
#define X first
#define Y second
#define INF9  1000000000
#define INF18 1000000000000000000
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define pb(x) push_back(x)
#define DEB(x) cout << #x" = " << x;
#define DEB2(x, y) DEB(x);DEB(y)
#define qrt(x) (x) * (x)
const double PI = acos(-1.0);

using namespace std;

template<typename T1, typename T2>
istream& operator >> (istream& is, pair<T1, T2>& v){
	is >> v.X >> v.Y;
	return is;
}
template<typename T1, typename T2>
ostream& operator << (ostream& os, pair<T1, T2>& v){
	os << "{";
	os << v.X << ", " << v.Y;
	os << "}";
	return os;
}
template<typename T1, typename T2>
ostream& operator << (ostream& os, map<T1, T2>& v){
	os << "[";
	for (auto a : v)
	{
		os << a << ' ';
	}
	os << "]" << endl;
	return os;
}

template<typename T>
istream& operator >> (istream& is, vector<T>& v){
	for(int i = 0; i < v.size(); ++i){
		is >> v[i];
	}
	return is;
}
template<typename T>
ostream& operator << (ostream& os, vector<T>& v){
	os << "[";
	for(int i = 0; i < v.size(); ++i){
		os << v[i];
		if(i != v.size() - 1) os << " ";
	}
	os << "]" << endl;
	return os;
}
template<typename T>
ostream& operator << (ostream& os, deque<T>& v){
	os << "[";
	for(int i = 0; i < v.size(); ++i){
		os << v[i];
		if(i != v.size() - 1) os << " ";
	}
	os << "]" << endl;
	return os;
}
template<typename T>
ostream& operator << (ostream& os, set<T>& v){
	os << "[";
	int i = 0;
	for(auto a : v){
		os << a;
		if(i != v.size() - 1) os << " ";
	}
	os << "]" << endl;
	return os;
}

vector<pair<ll, int> > v;
vector<int> was;

int dfs(ll s, int lp, int rr)
{
	if (rr < 0)
	{
		return -1;
	}

	int l = lp, r = rr;
	while (r > l)
	{
		int mid = (r + l + 1) >> 1;

		if (v[mid].X * (rr - mid + 1) >= s && was[mid])
		{
			l = mid;
		}
		else
		{
			r = mid - 1;
		}
	}

	return v[l].X * (rr - l + 1) >= s && was[l] ? l : -1;
}

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);

	ll n, x1, x2;

	cin >> n >> x1 >> x2;

	bool flip = false;

	if (x1 < x2)
	{
		flip = true;
		swap(x1, x2);
	}

	v.resize(n);
	was.resize(n, 1);

	for (int i = 0; i < v.size(); ++i)
	{
		cin >> v[i].X;

		v[i].Y = i;
	}

	sort(all(v));

	// cout << v << endl;

	while (true)
	{
		int fans = dfs(x1, 0, n - 1);

		if (fans == -1)
		{
			break;
		}

		int sans = dfs(x2, 0, fans - 1);

		// cout << fans << ' ' << sans << endl;

		if (sans == -1)
		{
			was[fans] = 0;
			continue;
		}

		cout << "Yes" << endl;

		if (!flip)
		{
			cout << n - fans << ' ' << fans - sans << endl;

			for (int i = fans; i < n; ++i)
			{
				cout << v[i].Y + 1 << ' ';
			}
			cout << endl;

			for (int i = sans; i < fans; ++i)
			{
				cout << v[i].Y + 1 << ' ';
			}
			cout << endl;
		}
		else
		{
			cout << fans - sans << ' ' << n - fans << endl;

			for (int i = sans; i < fans; ++i)
			{
				cout << v[i].Y + 1 << ' ';
			}
			cout << endl;

			for (int i = fans; i < n; ++i)
			{
				cout << v[i].Y + 1 << ' ';
			}
			cout << endl;
		}

		return 0;
	}

	swap(x1, x2);

	flip = !flip;
	was.clear();
	was.resize(n, 1);

	while (true)
	{
		int fans = dfs(x1, 0, n - 1);

		if (fans == -1)
		{
			cout << "No" << endl;
			break;
		}

		int sans = dfs(x2, 0, fans - 1);

		// cout << fans << ' ' << sans << endl;

		if (sans == -1)
		{
			was[fans] = 0;
			continue;
		}

		cout << "Yes" << endl;

		if (!flip)
		{
			cout << n - fans << ' ' << fans - sans << endl;

			for (int i = fans; i < n; ++i)
			{
				cout << v[i].Y + 1 << ' ';
			}
			cout << endl;

			for (int i = sans; i < fans; ++i)
			{
				cout << v[i].Y + 1 << ' ';
			}
			cout << endl;
		}
		else
		{
			cout << fans - sans << ' ' << n - fans << endl;

			for (int i = sans; i < fans; ++i)
			{
				cout << v[i].Y + 1 << ' ';
			}
			cout << endl;

			for (int i = fans; i < n; ++i)
			{
				cout << v[i].Y + 1 << ' ';
			}
			cout << endl;
		}

		break;
	}

	return 0;
}


/*input
6 8 16
3 5 2 9 8 7
*/
#include <iostream>
#include <map>
#include <iomanip>
#include <vector>
#include <set>
#include <stdio.h>
#include <stack>
#include <math.h>
#include <string>
#include <algorithm>
#include <bitset>
#include <functional>
#include <stdlib.h>
#include <list>
#include <queue>
#include <unordered_set>
#include <unordered_map>
#include <deque>
#include <complex>

#define _USE_MATH_DEFINES
#define pii pair<int, int>
#define ll long long
#define ull unsigned long long
#define pll pair<ll, ll>
#define ld long double
#define X first
#define Y second
#define INF9  1000000000
#define INF18 1000000000000000000
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define pb(x) push_back(x)
#define DEB(x) cout << #x" = " << x;
#define DEB2(x, y) DEB(x);DEB(y)
#define qrt(x) (x) * (x)
const double PI = acos(-1.0);

using namespace std;

template<typename T1, typename T2>
istream& operator >> (istream& is, pair<T1, T2>& v){
	is >> v.X >> v.Y;
	return is;
}
template<typename T1, typename T2>
ostream& operator << (ostream& os, pair<T1, T2>& v){
	os << "{";
	os << v.X << ", " << v.Y;
	os << "}";
	return os;
}
template<typename T1, typename T2>
ostream& operator << (ostream& os, map<T1, T2>& v){
	os << "[";
	for (auto a : v)
	{
		os << a << ' ';
	}
	os << "]" << endl;
	return os;
}

template<typename T>
istream& operator >> (istream& is, vector<T>& v){
	for(int i = 0; i < v.size(); ++i){
		is >> v[i];
	}
	return is;
}
template<typename T>
ostream& operator << (ostream& os, vector<T>& v){
	os << "[";
	for(int i = 0; i < v.size(); ++i){
		os << v[i];
		if(i != v.size() - 1) os << " ";
	}
	os << "]" << endl;
	return os;
}
template<typename T>
ostream& operator << (ostream& os, deque<T>& v){
	os << "[";
	for(int i = 0; i < v.size(); ++i){
		os << v[i];
		if(i != v.size() - 1) os << " ";
	}
	os << "]" << endl;
	return os;
}
template<typename T>
ostream& operator << (ostream& os, set<T>& v){
	os << "[";
	int i = 0;
	for(auto a : v){
		os << a;
		if(i != v.size() - 1) os << " ";
	}
	os << "]" << endl;
	return os;
}

vector<pair<ll, int> > v;
vector<int> was;

int dfs(ll s, int lp, int rr)
{
	if (rr < 0)
	{
		return -1;
	}

	ll l = lp, r = rr;
	while (r > l)
	{
		ll mid = (r + l + 1) >> 1;

		if (v[mid].X * (rr - mid + 1) >= s && was[mid])
		{
			l = mid;
		}
		else
		{
			r = mid - 1;
		}
	}

	return v[l].X * (rr - l + 1) >= s && was[l] ? l : -1;
}

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);

	ll n, x1, x2;

	cin >> n >> x1 >> x2;

	bool flip = false;

	if (x1 < x2)
	{
		flip = true;
		swap(x1, x2);
	}

	v.resize(n);
	was.resize(n, 1);

	for (int i = 0; i < v.size(); ++i)
	{
		cin >> v[i].X;

		v[i].Y = i;
	}

	sort(all(v));

	// cout << v << endl;

	while (true)
	{
		int fans = dfs(x1, 0, n - 1);

		if (fans == -1)
		{
			break;
		}

		int sans = dfs(x2, 0, fans - 1);

		// cout << fans << ' ' << sans << endl;

		if (sans == -1)
		{
			was[fans] = 0;
			continue;
		}

		cout << "Yes" << endl;

		if (!flip)
		{
			cout << n - fans << ' ' << fans - sans << endl;

			for (int i = fans; i < n; ++i)
			{
				cout << v[i].Y + 1 << ' ';
			}
			cout << endl;

			for (int i = sans; i < fans; ++i)
			{
				cout << v[i].Y + 1 << ' ';
			}
			cout << endl;
		}
		else
		{
			cout << fans - sans << ' ' << n - fans << endl;

			for (int i = sans; i < fans; ++i)
			{
				cout << v[i].Y + 1 << ' ';
			}
			cout << endl;

			for (int i = fans; i < n; ++i)
			{
				cout << v[i].Y + 1 << ' ';
			}
			cout << endl;
		}

		return 0;
	}

	swap(x1, x2);

	flip = !flip;
	was.clear();
	was.resize(n, 1);

	while (true)
	{
		int fans = dfs(x1, 0, n - 1);

		if (fans == -1)
		{
			cout << "No" << endl;
			break;
		}

		int sans = dfs(x2, 0, fans - 1);

		// cout << fans << ' ' << sans << endl;

		if (sans == -1)
		{
			was[fans] = 0;
			continue;
		}

		cout << "Yes" << endl;

		if (!flip)
		{
			cout << n - fans << ' ' << fans - sans << endl;

			for (int i = fans; i < n; ++i)
			{
				cout << v[i].Y + 1 << ' ';
			}
			cout << endl;

			for (int i = sans; i < fans; ++i)
			{
				cout << v[i].Y + 1 << ' ';
			}
			cout << endl;
		}
		else
		{
			cout << fans - sans << ' ' << n - fans << endl;

			for (int i = sans; i < fans; ++i)
			{
				cout << v[i].Y + 1 << ' ';
			}
			cout << endl;

			for (int i = fans; i < n; ++i)
			{
				cout << v[i].Y + 1 << ' ';
			}
			cout << endl;
		}

		break;
	}

	return 0;
}


/*input
5 12 20
7 8 4 11 9
*/
#include <iostream>
#include <map>
#include <iomanip>
#include <vector>
#include <set>
#include <stdio.h>
#include <stack>
#include <math.h>
#include <string>
#include <algorithm>
#include <bitset>
#include <functional>
#include <stdlib.h>
#include <list>
#include <queue>
#include <unordered_set>
#include <unordered_map>
#include <deque>
#include <complex>

#define _USE_MATH_DEFINES
#define pii pair<int, int>
#define ll long long
#define ull unsigned long long
#define pll pair<ll, ll>
#define ld long double
#define X first
#define Y second
#define INF9  1000000000
#define INF18 1000000000000000000
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define pb(x) push_back(x)
#define DEB(x) cout << #x" = " << x;
#define DEB2(x, y) DEB(x);DEB(y)
#define qrt(x) (x) * (x)
const double PI = acos(-1.0);

using namespace std;

template<typename T1, typename T2>
istream& operator >> (istream& is, pair<T1, T2>& v){
    is >> v.X >> v.Y;
    return is;
}
template<typename T1, typename T2>
ostream& operator << (ostream& os, pair<T1, T2>& v){
    os << "{";
    os << v.X << ", " << v.Y;
    os << "}";
    return os;
}
template<typename T1, typename T2>
ostream& operator << (ostream& os, map<T1, T2>& v){
    os << "[";
    for (auto a : v)
    {
        os << a << ' ';
    }
    os << "]" << endl;
    return os;
}

template<typename T>
istream& operator >> (istream& is, vector<T>& v){
    for(int i = 0; i < v.size(); ++i){
        is >> v[i];
    }
    return is;
}
template<typename T>
ostream& operator << (ostream& os, vector<T>& v){
    os << "[";
    for(int i = 0; i < v.size(); ++i){
        os << v[i];
        if(i != v.size() - 1) os << " ";
    }
    os << "]" << endl;
    return os;
}
template<typename T>
ostream& operator << (ostream& os, deque<T>& v){
    os << "[";
    for(int i = 0; i < v.size(); ++i){
        os << v[i];
        if(i != v.size() - 1) os << " ";
    }
    os << "]" << endl;
    return os;
}
template<typename T>
ostream& operator << (ostream& os, set<T>& v){
    os << "[";
    int i = 0;
    for(auto a : v){
        os << a;
        if(i != v.size() - 1) os << " ";
    }
    os << "]" << endl;
    return os;
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    ll n, x1, x2;

    cin >> n >> x1 >> x2;

    bool flip = false;

    if (x1 < x2)
    {
        flip = true;
        swap(x1, x2);
    }

    vector<pair<ll, int> > v(n);

    for (int i = 0; i < v.size(); ++i)
    {
        cin >> v[i].X;

        v[i].Y = i;
    }

    sort(all(v));

    // cout << v << endl;

    for (int i = v.size() - 1; i >= 0; --i)
    {
        if (v[i].X * (v.size() - i) < x1)
        {
            continue;
        }

        for (int j = i - 1; j >= 0; --j)
        {
            if (v[j].X * (i - j) < x2)
            {
                continue;
            }

            cout << "Yes" << endl;

            if (!flip)
            {
                cout << v.size() - i << ' ' << i - j << endl;

                for (int ii = i; ii < v.size(); ++ii)
                {
                    cout << v[ii].Y + 1 << ' ';
                }
                cout << endl;

                for (int ii = j; ii < i; ++ii)
                {
                    cout << v[ii].Y + 1 << ' ';
                }
                cout << endl;
            }
            else
            {
                cout << i - j << ' ' << v.size() - i << endl;

                for (int ii = j; ii < i; ++ii)
                {
                    cout << v[ii].Y + 1 << ' ';
                }
                cout << endl;

                for (int ii = i; ii < v.size(); ++ii)
                {
                    cout << v[ii].Y + 1 << ' ';
                }
                cout << endl;
            }

            return 0;
        }

        break;
    }

    swap(x1, x2);
    flip = !flip;

    for (int i = v.size() - 1; i >= 0; --i)
    {
        if (v[i].X * (v.size() - i) < x1)
        {
            continue;
        }

        for (int j = i - 1; j >= 0; --j)
        {
            if (v[j].X * (i - j) < x2)
            {
                continue;
            }

            cout << "Yes" << endl;

            if (!flip)
            {
                cout << v.size() - i << ' ' << i - j << endl;

                for (int ii = i; ii < v.size(); ++ii)
                {
                    cout << v[ii].Y + 1 << ' ';
                }
                cout << endl;

                for (int ii = j; ii < i; ++ii)
                {
                    cout << v[ii].Y + 1 << ' ';
                }
                cout << endl;
            }
            else
            {
                cout << i - j << ' ' << v.size() - i << endl;

                for (int ii = j; ii < i; ++ii)
                {
                    cout << v[ii].Y + 1 << ' ';
                }
                cout << endl;

                for (int ii = i; ii < v.size(); ++ii)
                {
                    cout << v[ii].Y + 1 << ' ';
                }
                cout << endl;
            }

            return 0;
        }

        break;
    }

    cout << "No" << endl;

    return 0;
}


/*input
6 8 16
3 5 2 9 8 7
*/
#include <iostream>
#include <map>
#include <iomanip>
#include <vector>
#include <set>
#include <stdio.h>
#include <stack>
#include <math.h>
#include <string>
#include <algorithm>
#include <bitset>
#include <functional>
#include <stdlib.h>
#include <list>
#include <queue>
#include <unordered_set>
#include <unordered_map>
#include <deque>
#include <complex>

#define _USE_MATH_DEFINES
#define pii pair<int, int>
#define ll long long
#define ull unsigned long long
#define pll pair<ll, ll>
#define ld long double
#define X first
#define Y second
#define INF9  1000000000
#define INF18 1000000000000000000
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define pb(x) push_back(x)
#define DEB(x) cout << #x" = " << x;
#define DEB2(x, y) DEB(x);DEB(y)
#define qrt(x) (x) * (x)
const double PI = acos(-1.0);

using namespace std;

template<typename T1, typename T2>
istream& operator >> (istream& is, pair<T1, T2>& v){
    is >> v.X >> v.Y;
    return is;
}
template<typename T1, typename T2>
ostream& operator << (ostream& os, pair<T1, T2>& v){
    os << "{";
    os << v.X << ", " << v.Y;
    os << "}";
    return os;
}
template<typename T1, typename T2>
ostream& operator << (ostream& os, map<T1, T2>& v){
    os << "[";
    for (auto a : v)
    {
        os << a << ' ';
    }
    os << "]" << endl;
    return os;
}

template<typename T>
istream& operator >> (istream& is, vector<T>& v){
    for(int i = 0; i < v.size(); ++i){
        is >> v[i];
    }
    return is;
}
template<typename T>
ostream& operator << (ostream& os, vector<T>& v){
    os << "[";
    for(int i = 0; i < v.size(); ++i){
        os << v[i];
        if(i != v.size() - 1) os << " ";
    }
    os << "]" << endl;
    return os;
}
template<typename T>
ostream& operator << (ostream& os, deque<T>& v){
    os << "[";
    for(int i = 0; i < v.size(); ++i){
        os << v[i];
        if(i != v.size() - 1) os << " ";
    }
    os << "]" << endl;
    return os;
}
template<typename T>
ostream& operator << (ostream& os, set<T>& v){
    os << "[";
    int i = 0;
    for(auto a : v){
        os << a;
        if(i != v.size() - 1) os << " ";
    }
    os << "]" << endl;
    return os;
}

vector<pair<ll, int> > v;
vector<int> was;

int dfs(ll s, int lp, int rr)
{
    if (rr < 0)
    {
        return -1;
    }

    ll l = lp, r = rr;
    while (r - l > 1)
    {
        ll mid = (r + l) >> 1;

        if (v[mid].X * (rr - mid + 1) >= s && was[mid])
        {
            l = mid;
        }
        else
        {
            r = mid;
        }
    }

    return v[l].X * (rr - l + 1) >= s && was[l] ? l : -1;
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    ll n, x1, x2;

    cin >> n >> x1 >> x2;

    bool flip = false;

    if (x1 < x2)
    {
        flip = true;
        swap(x1, x2);
    }

    v.resize(n);
    was.resize(n, 1);

    for (int i = 0; i < v.size(); ++i)
    {
        cin >> v[i].X;

        v[i].Y = i;
    }

    sort(all(v));

    // cout << v << endl;

    while (true)
    {
        int fans = dfs(x1, 0, n - 1);

        if (fans == -1)
        {
            break;
        }

        int sans = dfs(x2, 0, fans - 1);

        // cout << fans << ' ' << sans << endl;

        if (sans == -1)
        {
            was[fans] = 0;
            continue;
        }

        cout << "Yes" << endl;

        if (!flip)
        {
            cout << n - fans << ' ' << fans - sans << endl;

            for (int i = fans; i < n; ++i)
            {
                cout << v[i].Y + 1 << ' ';
            }
            cout << endl;

            for (int i = sans; i < fans; ++i)
            {
                cout << v[i].Y + 1 << ' ';
            }
            cout << endl;
        }
        else
        {
            cout << fans - sans << ' ' << n - fans << endl;

            for (int i = sans; i < fans; ++i)
            {
                cout << v[i].Y + 1 << ' ';
            }
            cout << endl;

            for (int i = fans; i < n; ++i)
            {
                cout << v[i].Y + 1 << ' ';
            }
            cout << endl;
        }

        return 0;
    }

    swap(x1, x2);

    flip = !flip;
    was.clear();
    was.resize(n, 1);

    while (true)
    {
        int fans = dfs(x1, 0, n - 1);

        if (fans == -1)
        {
            cout << "No" << endl;
            break;
        }

        int sans = dfs(x2, 0, fans - 1);

        // cout << fans << ' ' << sans << endl;

        if (sans == -1)
        {
            was[fans] = 0;
            continue;
        }

        cout << "Yes" << endl;

        if (!flip)
        {
            cout << n - fans << ' ' << fans - sans << endl;

            for (int i = fans; i < n; ++i)
            {
                cout << v[i].Y + 1 << ' ';
            }
            cout << endl;

            for (int i = sans; i < fans; ++i)
            {
                cout << v[i].Y + 1 << ' ';
            }
            cout << endl;
        }
        else
        {
            cout << fans - sans << ' ' << n - fans << endl;

            for (int i = sans; i < fans; ++i)
            {
                cout << v[i].Y + 1 << ' ';
            }
            cout << endl;

            for (int i = fans; i < n; ++i)
            {
                cout << v[i].Y + 1 << ' ';
            }
            cout << endl;
        }

        break;
    }

    return 0;
}


/*input
5 12 20
7 8 4 11 9
*/
#include <iostream>
#include <map>
#include <iomanip>
#include <vector>
#include <set>
#include <stdio.h>
#include <stack>
#include <math.h>
#include <string>
#include <algorithm>
#include <bitset>
#include <functional>
#include <stdlib.h>
#include <list>
#include <queue>
#include <unordered_set>
#include <unordered_map>
#include <deque>
#include <complex>

#define _USE_MATH_DEFINES
#define pii pair<int, int>
#define ll long long
#define ull unsigned long long
#define pll pair<ll, ll>
#define ld long double
#define X first
#define Y second
#define INF9  1000000000
#define INF18 1000000000000000000
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define pb(x) push_back(x)
#define DEB(x) cout << #x" = " << x;
#define DEB2(x, y) DEB(x);DEB(y)
#define qrt(x) (x) * (x)
const double PI = acos(-1.0);

using namespace std;

template<typename T1, typename T2>
istream& operator >> (istream& is, pair<T1, T2>& v){
    is >> v.X >> v.Y;
    return is;
}
template<typename T1, typename T2>
ostream& operator << (ostream& os, pair<T1, T2>& v){
    os << "{";
    os << v.X << ", " << v.Y;
    os << "}";
    return os;
}
template<typename T1, typename T2>
ostream& operator << (ostream& os, map<T1, T2>& v){
    os << "[";
    for (auto a : v)
    {
        os << a << ' ';
    }
    os << "]" << endl;
    return os;
}

template<typename T>
istream& operator >> (istream& is, vector<T>& v){
    for(int i = 0; i < v.size(); ++i){
        is >> v[i];
    }
    return is;
}
template<typename T>
ostream& operator << (ostream& os, vector<T>& v){
    os << "[";
    for(int i = 0; i < v.size(); ++i){
        os << v[i];
        if(i != v.size() - 1) os << " ";
    }
    os << "]" << endl;
    return os;
}
template<typename T>
ostream& operator << (ostream& os, deque<T>& v){
    os << "[";
    for(int i = 0; i < v.size(); ++i){
        os << v[i];
        if(i != v.size() - 1) os << " ";
    }
    os << "]" << endl;
    return os;
}
template<typename T>
ostream& operator << (ostream& os, set<T>& v){
    os << "[";
    int i = 0;
    for(auto a : v){
        os << a;
        if(i != v.size() - 1) os << " ";
    }
    os << "]" << endl;
    return os;
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    ll n, x1, x2;

    cin >> n >> x1 >> x2;

    bool flip = false;

    if (x1 < x2)
    {
        flip = true;
        swap(x1, x2);
    }

    vector<pair<ll, int> > v(n);

    for (int i = 0; i < v.size(); ++i)
    {
        cin >> v[i].X;

        v[i].Y = i;
    }

    sort(all(v));

    // cout << v << endl;

    for (int i = v.size() - 1; i >= 0; --i)
    {
        if (v[i].X * (v.size() - i) < x1)
        {
            continue;
        }

        for (int j = i - 1; j >= 0; --j)
        {
            if (v[j].X * (i - j) < x2)
            {
                continue;
            }

            cout << "Yes" << endl;

            if (!flip)
            {
                cout << v.size() - i << ' ' << i - j << endl;

                for (int ii = i; ii < v.size(); ++ii)
                {
                    cout << v[ii].Y + 1 << ' ';
                }
                cout << endl;

                for (int ii = j; ii < i; ++ii)
                {
                    cout << v[ii].Y + 1 << ' ';
                }
                cout << endl;
            }
            else
            {
                cout << i - j << ' ' << v.size() - i << endl;

                for (int ii = j; ii < i; ++ii)
                {
                    cout << v[ii].Y + 1 << ' ';
                }
                cout << endl;

                for (int ii = i; ii < v.size(); ++ii)
                {
                    cout << v[ii].Y + 1 << ' ';
                }
                cout << endl;
            }

            return 0;
        }
    }

    swap(x1, x2);
    flip = !flip;

    for (int i = v.size() - 1; i >= 0; --i)
    {
        if (v[i].X * (v.size() - i) < x1)
        {
            continue;
        }

        for (int j = i - 1; j >= 0; --j)
        {
            if (v[j].X * (i - j) < x2)
            {
                continue;
            }

            cout << "Yes" << endl;

            if (!flip)
            {
                cout << v.size() - i << ' ' << i - j << endl;

                for (int ii = i; ii < v.size(); ++ii)
                {
                    cout << v[ii].Y + 1 << ' ';
                }
                cout << endl;

                for (int ii = j; ii < i; ++ii)
                {
                    cout << v[ii].Y + 1 << ' ';
                }
                cout << endl;
            }
            else
            {
                cout << i - j << ' ' << v.size() - i << endl;

                for (int ii = j; ii < i; ++ii)
                {
                    cout << v[ii].Y + 1 << ' ';
                }
                cout << endl;

                for (int ii = i; ii < v.size(); ++ii)
                {
                    cout << v[ii].Y + 1 << ' ';
                }
                cout << endl;
            }

            return 0;
        }
    }

    cout << "No" << endl;

    return 0;
}


#include<bits/stdc++.h>
#define rep(i, a, b) for(int i=a;i<=b; ++i)
#define per(i, a, b) for(int i=a;i>=b;--i)
#define de(a) cout <<#a<<" => "<<a<<endl
#define dep(a) cout <<"(first, second) => "<<"("<<a.fi<<","<<a.se<<")"<<endl
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define pob pop_back
#define ms(a, b) memset(a, b, sizeof(a))
#define pq priority_queue
using namespace std;
typedef long long ll;
typedef pair<ll, int> pii;
typedef vector<int>vi;
const int maxn = 1e5+7;
const int inf = 1e9+7;
int gcd(int a, int b) { return b ? gcd(b, a%b) : a; }
int n, m;
// ===============================
pii p[maxn];
ll x1, x2, t;
vi ans1, ans2;
bool solve() {
	rep(i, 0, n-1){
		ll a = p[i].fi;
		ll cnt = (x1 + a - 1) / a;
		if(cnt + i >= n) continue;
		ll sum = p[i+cnt].fi*(n-(i+cnt));
		if(sum>=x2) {
			rep(j, i, n-1) {
				if(j<=i+cnt-1) ans1.pb(p[j].se);
				else ans2.pb(p[j].se);
			}
			return true;
		}
    }
    return false;
}
int main(){
//	freopen("in.txt", "r", stdin);
	scanf("%d%lld%lld", &n, &x1, &x2);
	rep(i, 0, n-1) {
		scanf("%lld", &t);
		p[i].fi = t, p[i].se=i+1;
	}
	sort(p, p+n);
	if(!solve()) {
		swap(x1, x2);
		if(!solve()) {
			puts("No");
			return 0;
		}
		swap(ans1, ans2);
	}
	int s1=ans1.size();
	int s2=ans2.size();
	printf("Yes\n%d %d\n", s1, s2);
	rep(i, 0, s1-1) {
		if(i) printf(" ");
		printf("%d", ans1[i]);
	}
	puts("");
	rep(i, 0, s2-1) {
		if(i) printf(" ");
		printf("%d", ans2[i]);
	}
	puts("");
	return 0;
}


#include<bits/stdc++.h>
#define rep(i, a, b) for(int i=a;i<=b; ++i)
#define per(i, a, b) for(int i=a;i>=b;--i)
#define de(a) cout <<#a<<" => "<<a<<endl
#define dep(a) cout <<"(first, second) => "<<"("<<a.fi<<","<<a.se<<")"<<endl
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define pob pop_back
#define ms(a, b) memset(a, b, sizeof(a))
#define pq priority_queue
using namespace std;
typedef long long ll;
typedef pair<ll, int> pii;
typedef vector<int>vi;
const int maxn = 1e5+7;
const int inf = 1e9+7;
int gcd(int a, int b) { return b ? gcd(b, a%b) : a; }
int n, m;
// ===============================
pii p[maxn];
ll x1, x2, t;
vi ans1, ans2;
bool solve() {
	rep(i, 0, n-1){
		ll a = p[i].fi;
		ll cnt = (x1 + a - 1) / a;
		if(cnt + i >= n) continue;
		ll sum = p[i+cnt].fi*(n-(i+cnt));
		if(sum>=x2) {
			rep(j, i, n-1) {
				if(j<i+cnt) ans1.pb(p[j].se);
				else ans2.pb(p[j].se);
			}
			return true;
		}
    }
    return false;
}
int main(){
//	freopen("in.txt", "r", stdin);
	scanf("%d%lld%lld", &n, &x1, &x2);
	rep(i, 0, n-1) {
		scanf("%lld", &t);
		p[i].fi = t, p[i].se=i+1;
	}
	sort(p, p+n);
	if(!solve()) {
		swap(x1, x2);
		if(!solve()) {
			puts("No");
			return 0;
		}
		swap(ans1, ans2);
	}
	int s1=ans1.size();
	int s2=ans2.size();
	printf("Yes\n%d %d\n", s1, s2);
	rep(i, 0, s1-1) {
		if(i) printf(" ");
		printf("%d", ans1[i]);
	}
	puts("");
	rep(i, 0, s2-1) {
		if(i) printf(" ");
		printf("%d", ans2[i]);
	}
	puts("");
	return 0;
}


#include<bits/stdc++.h>
#define rep(i, a, b) for(int i=a;i<=b; ++i)
#define per(i, a, b) for(int i=a;i>=b;--i)
#define de(a) cout <<#a<<" => "<<a<<endl
#define dep(a) cout <<"(first, second) => "<<"("<<a.fi<<","<<a.se<<")"<<endl
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define pob pop_back
#define ms(a, b) memset(a, b, sizeof(a))
#define pq priority_queue
using namespace std;
typedef long long ll;
typedef pair<ll, int> pii;
typedef vector<int>vi;
const int maxn = 1e5+7;
const int inf = 1e9+7;
int gcd(int a, int b) { return b ? gcd(b, a%b) : a; }
int n, m;
// ===============================
pii p[maxn];
ll x1, x2, t;
vi ans1, ans2;
bool solve(bool rev) {
	rep(i, 0, n-1){
		ll a = p[i].fi;
		ll cnt = (x1 + a - 1) / a;
		if(cnt + i >= n) continue;
		ll sum = p[i+cnt].fi*(n-(i+cnt));
		if(sum>=x2) {
			rep(j, i, n-1) {
				if(rev) {
					if(j<=i+cnt-1) ans2.pb(p[j].se);
					else ans1.pb(p[j].se);
				} else {
					if(j<=i+cnt-1) ans1.pb(p[j].se);
					else ans2.pb(p[j].se);
				}
			}
			return true;
		}
    }
    return false;
}
int main(){
//	freopen("in.txt", "r", stdin);
	scanf("%d%lld%lld", &n, &x1, &x2);
	rep(i, 0, n-1) {
		scanf("%lld", &t);
		p[i].fi = t, p[i].se=i+1;
	}
	sort(p, p+n);
	if(!solve(false)) {
		swap(x1, x2);
		if(!solve(true)) {
			puts("No");
			return 0;
		}
	}
	int s1=ans1.size();
	int s2=ans2.size();
	printf("Yes\n%d %d\n", s1, s2);
	rep(i, 0, s1-1) {
		if(i) printf(" ");
		printf("%d", ans1[i]);
	}
	puts("");
	rep(i, 0, s2-1) {
		if(i) printf(" ");
		printf("%d", ans2[i]);
	}
	puts("");
	return 0;
}


#include<bits/stdc++.h>
#define rep(i, a, b) for(int i=a;i<=b; ++i)
#define per(i, a, b) for(int i=a;i>=b;--i)
#define de(a) cout <<#a<<" => "<<a<<endl
#define dep(a) cout <<"(first, second) => "<<"("<<a.fi<<","<<a.se<<")"<<endl
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define pob pop_back
#define ms(a, b) memset(a, b, sizeof(a))
#define pq priority_queue
using namespace std;
typedef long long ll;
typedef pair<ll, int> pii;
typedef vector<int>vi;
const int maxn = 3e5+7;
const int inf = 1e9+7;
int gcd(int a, int b) { return b ? gcd(b, a%b) : a; }
int n, m;
// ===============================
pii p[maxn];
ll x1, x2, t;
vi ans1, ans2;
bool solve() {
	rep(i, 0, n-1){
		ll a = p[i].fi;
		ll cnt = (x1 + a - 1) / a;
		if(cnt + i >= n) continue;
		ll sum = p[i+cnt].fi*(n-(i+cnt));
		if(sum>=x2) {
			rep(j, i, n-1) {
				if(j<i+cnt) ans1.pb(p[j].se);
				else ans2.pb(p[j].se);
			}
			return true;
		}
    }
    return false;
}
int main(){
//	freopen("in.txt", "r", stdin);
	scanf("%d%lld%lld", &n, &x1, &x2);
	rep(i, 0, n-1) {
		scanf("%lld", &t);
		p[i].fi = t, p[i].se=i+1;
	}
	sort(p, p+n);
	if(!solve()) {
		swap(x1, x2);
		if(!solve()) {
			puts("No");
			return 0;
		}
		swap(ans1, ans2);
	}
	int s1=ans1.size();
	int s2=ans2.size();
	printf("Yes\n%d %d\n", s1, s2);
	rep(i, 0, s1-1) {
		if(i) printf(" ");
		printf("%d", ans1[i]);
	}
	puts("");
	rep(i, 0, s2-1) {
		if(i) printf(" ");
		printf("%d", ans2[i]);
	}
	puts("");
	return 0;
}


#include<bits/stdc++.h>
#define rep(i, a, b) for(int i=a;i<=b; ++i)
#define per(i, a, b) for(int i=a;i>=b;--i)
#define de(a) cout <<#a<<" => "<<a<<endl
#define dep(a) cout <<"(first, second) => "<<"("<<a.fi<<","<<a.se<<")"<<endl
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define pob pop_back
#define ms(a, b) memset(a, b, sizeof(a))
#define pq priority_queue
using namespace std;
typedef long long ll;
typedef pair<ll, int> pii;
typedef vector<int>vi;
const int maxn = 1e5+7;
const int inf = 1e9+7;
int gcd(int a, int b) { return b ? gcd(b, a%b) : a; }
int n, m;
// ===============================
pii p[maxn];
ll x1, x2, t;
vi ans1, ans2;
bool solve(bool rev) {
	rep(i, 0, n-1){
		ll a = p[i].fi;
		ll cnt = (x1 + a - 1) / a;
		if(cnt + i >= n) continue;
		ll sum = p[i+cnt].fi*(n-(i+cnt));
		if(sum>=x2) {
			rep(j, i, n-1) {
				if(rev) {
					if(j<=i+cnt) ans2.pb(p[j].se);
					else ans1.pb(p[j].se);
				} else {
					if(j<=i+cnt) ans1.pb(p[j].se);
					else ans2.pb(p[j].se);
				}
			}
			return true;
		}
    }
    return false;
}
int main(){
//	freopen("in.txt", "r", stdin);
	scanf("%d%lld%lld", &n, &x1, &x2);
	rep(i, 0, n-1) {
		scanf("%lld", &t);
		p[i].fi = t, p[i].se=i+1;
	}
	sort(p, p+n);
	if(!solve(false)) {
		swap(x1, x2);
		if(!solve(true)) {
			puts("No");
			return 0;
		}
	}
	int s1=ans1.size();
	int s2=ans2.size();
	printf("Yes\n%d %d\n", s1, s2);
	rep(i, 0, s1-1) {
		if(i) printf(" ");
		printf("%d", ans1[i]);
	}
	puts("");
	rep(i, 0, s2-1) {
		if(i) printf(" ");
		printf("%d", ans2[i]);
	}
	puts("");
	return 0;
}


#include "iostream"
#include "string"
using namespace std;

int main()
{
    string s;
    cin>>s;
    bool b=false;
    for(int i=0;i<s.length();i++)
    {
        if(s[i]=='1') cout<<s[i];
        else if(!b) {b=true; continue;}
        else cout<<s[i];
    }
    return 0;
}


#include<iostream>
#include<string>
using namespace std;
string s;
int main ()
{
    int i,sz=0,j;
    cin>>s;
    sz=s.size();
    i=0;
    for (i=0;i<sz;i++){if (s[i]=='0'){break;}else cout<<s[i];}
    for (j=i+1;j<sz;j++){cout<<s[j];}
    cout<<endl;
    return 0;
}


#include<iostream>
#include<string>
using namespace std;
string s;
int main ()
{
    int i,sz=0,j;
    cin>>s;
    sz=s.size();
    i=0;
    while (s[i]=='0'&&i<sz){i++;}
    for (;i<sz;i++){if (s[i]=='0'){break;}else cout<<s[i];}
    for (j=i+1;j<sz;j++){cout<<s[j];}
    cout<<endl;
    return 0;
}


#include<iostream>
#include<string>
using namespace std;
string s,s1;
int main ()
{
    int i,sz=0,j;
    cin>>s;
    sz=s.size();
    i=0;
    for (i=0;i<sz;i++){if (s[i]=='0'){break;}else s1+=s[i];}
    for (j=i+1;j<sz;j++){s1+=s[j];}
    if (s==s1)s1=s1.substr(0,sz-1);
    cout<<s1<<endl;
    return 0;
}


#include<iostream>
#include<string>
using namespace std;
string s;
int main ()
{
    int i,sz=0,j;
    cin>>s;
    sz=s.size();
    for (i=0;i<sz;i++){if (s[i]=='0'){break;}else cout<<s[i];}
    for (j=i+1;j<sz;j++){cout<<s[j];}
    cout<<endl;
    return 0;
}


#include <vector>
#include <list>
#include <map>
#include <set>
#include <queue>
#include <deque>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include<string.h>

#define uniq(c) (c).resize(unique(c.begin(),c.end())-(c).begin());
#define all(a) a.begin(),a.end()
#define FOR(i,a,b) for(int i=a;i<b;i++)
using namespace std;

int main()
{
   // freopen("read.txt","r",stdin);
   // freopen("write.txt","w",stdout);
 /*   char a[8][8];
    FOR(i,0,8)
    {
        FOR(j,0,8)
        cin>>a[i][j];
    }
//    if(a[0][0]==a[0][1]&&
int flag=0;
    FOR(i,0,8)
    {
        FOR(j,0,8)
        {
            if((a[i][j]==a[i][(j+1)%8]) && (a[i][(j+1)%8]==a[i][(j+2)%8]))
            {flag=1;
            break;}

           // if(flag) cout<<i<<" "<<j;
        }

    }
    if(flag) cout<<"NO";
    else
    {
        //if(a[0][0]=='B') cout<<"NO";
        //else
        cout<<"YES";
    }  */
    char a[1000000];
    scanf("%s",a);
    int l =strlen(a);
    int save,flag=0;
    FOR(i,0,l)
    {
        if(a[i]=='0') {flag=1;save=i;break;}
    }
    if(flag)
    {
        FOR(i,0,l)
        {
            if(a[i]=='1') cout<<a[i];
           // else if(a[i]=='0' &&
            else {if(a[i]=='0')
            {
              //  flag=2;
              if(i==save) continue;
              else cout<<a[i];
            }
            }
        }
}        else
        {
            FOR(i,0,l) cout<<a[i];
        }

      int aa;cin>>aa;
    return 0;
}


#include <vector>
#include <list>
#include <map>
#include <set>
#include <queue>
#include <deque>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include<string.h>

#define uniq(c) (c).resize(unique(c.begin(),c.end())-(c).begin());
#define all(a) a.begin(),a.end()
#define FOR(i,a,b) for(int i=a;i<b;i++)
using namespace std;

int main()
{
   // freopen("read.txt","r",stdin);
   // freopen("write.txt","w",stdout);
 /*   char a[8][8];
    FOR(i,0,8)
    {
        FOR(j,0,8)
        cin>>a[i][j];
    }
//    if(a[0][0]==a[0][1]&&
int flag=0;
    FOR(i,0,8)
    {
        FOR(j,0,8)
        {
            if((a[i][j]==a[i][(j+1)%8]) && (a[i][(j+1)%8]==a[i][(j+2)%8]))
            {flag=1;
            break;}

           // if(flag) cout<<i<<" "<<j;
        }

    }
    if(flag) cout<<"NO";
    else
    {
        //if(a[0][0]=='B') cout<<"NO";
        //else
        cout<<"YES";
    }  */
    char a[1000000];
    scanf("%s",a);
    int l =strlen(a);
    int save,flag=0;
    FOR(i,0,l)
    {
        if(a[i]=='0') {flag=1;save=i;break;}
    }
    if(flag)
    {
        FOR(i,0,l)
        {
            if(a[i]=='1') cout<<a[i];
           // else if(a[i]=='0' &&
            else {if(a[i]=='0')
            {
              //  flag=2;
              if(i==save) continue;
              else cout<<a[i];
            }
            }
        }
}        else
        {
            FOR(i,0,l-1) cout<<a[i];
        }

    //  int aa;cin>>aa;
    return 0;
}


#include <vector>
#include <list>
#include <map>
#include <set>
#include <queue>
#include <deque>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>

#define uniq(c) (c).resize(unique(c.begin(),c.end())-(c).begin());
#define all(a) a.begin(),a.end()
#define FOR(i,a,b) for(int i=a;i<b;i++)
using namespace std;

int main()
{
    char a[1000000];
    scanf("%s",a);
    int l =strlen(a);
    int save,flag;
    FOR(i,0,l)
    {
        if(a[i]=='0') {flag=1;save=i;break;}
    }
    if(flag)
    {
        FOR(i,0,l)
        {
            if(a[i]=='1') cout<<a[i];
           // else if(a[i]=='0' &&
            else {if(a[i]=='0')
            {
              //  flag=2;
              if(i==save) continue;
              else cout<<a[i];
            }
            }
        }
}        else
        {
            FOR(i,0,l-1) cout<<a[i];
        }

      ///int aa;cin>>aa;
    return 0;
}


#include <vector>
#include <list>
#include <map>
#include <set>
#include <queue>
#include <deque>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include<string.h>

#define uniq(c) (c).resize(unique(c.begin(),c.end())-(c).begin());
#define all(a) a.begin(),a.end()
#define FOR(i,a,b) for(int i=a;i<b;i++)
using namespace std;

int main()
{
   // freopen("read.txt","r",stdin);
   // freopen("write.txt","w",stdout);
 /*   char a[8][8];
    FOR(i,0,8)
    {
        FOR(j,0,8)
        cin>>a[i][j];
    }
//    if(a[0][0]==a[0][1]&&
int flag=0;
    FOR(i,0,8)
    {
        FOR(j,0,8)
        {
            if((a[i][j]==a[i][(j+1)%8]) && (a[i][(j+1)%8]==a[i][(j+2)%8]))
            {flag=1;
            break;}

           // if(flag) cout<<i<<" "<<j;
        }

    }
    if(flag) cout<<"NO";
    else
    {
        //if(a[0][0]=='B') cout<<"NO";
        //else
        cout<<"YES";
    }  */
    char a[1000000];
    scanf("%s",a);
    int l =strlen(a);
    int save,flag;
    FOR(i,0,l)
    {
        if(a[i]=='0') {flag=1;save=i;break;}
    }
    if(flag)
    {
        FOR(i,0,l)
        {
            if(a[i]=='1') cout<<a[i];
           // else if(a[i]=='0' &&
            else {if(a[i]=='0')
            {
              //  flag=2;
              if(i==save) continue;
              else cout<<a[i];
            }
            }
        }
}        else
        {
            FOR(i,0,l) cout<<a[i];
        }

      //int aa;cin>>aa;
    return 0;
}


#include <vector>
#include <list>
#include <map>
#include <set>
#include <queue>
#include <deque>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include<string.h>

#define uniq(c) (c).resize(unique(c.begin(),c.end())-(c).begin());
#define all(a) a.begin(),a.end()
#define FOR(i,a,b) for(int i=a;i<b;i++)
using namespace std;

int main()
{
    char a[1000000];
    scanf("%s",a);
    int l =strlen(a);
    int save,flag;
    FOR(i,0,l)
    {
        if(a[i]=='0') {flag=1;save=i;break;}
    }
    if(flag)
    {
        FOR(i,0,l)
        {
            if(a[i]=='1') cout<<a[i];
           // else if(a[i]=='0' &&
            else {if(a[i]=='0')
            {
              //  flag=2;
              if(i==save) continue;
              else cout<<a[i];
            }
            }
        }
}        else
        {
            FOR(i,0,l-1) cout<<a[i];
        }

      ///int aa;cin>>aa;
    return 0;
}


#include<cstdio>
#include<cstring>
int main()
{   int i;
    char s[100000]={0};
    scanf("%s",s);
    int l=strlen(s);
    int res=0;
    for(int j=0;j<l;j++)
    if(s[j]=='0'){s[j]='.';res=1;break;}
    if(res==0)s[0]='.';
    for(int j=0;j<l;j++)
        {if(s[j]>='0'&&s[j]<='9')
        printf("%c",s[j]);}
    printf("\n");
}


#include<cstdio>
#include<cstring>
int main()
{   int i;
    char s[100]={0};
    scanf("%s",s);
    int l=strlen(s);
    for( i=0;i<l;i++)
    if(s[i]=='1')break;
    for(int j=i;j<l;j++)
    if(s[j]=='0'){s[j]='.';break;}
    for(i=0;i<l;i++)
     if(s[i]=='1')break;
    for(int j=i;j<l;j++)
        {if(s[j]>='0'&&s[j]<='9')
        printf("%c",s[j]);}
    printf("\n");
}


#include<cstdio>
#include<cstring>
int main()
{
    char s[100]={0};
    scanf("%s",s);
    int l=strlen(s);
    for(int i=0;i<l;i++)
    if(s[i]=='0'){s[i]='.';break;}
    for(int i=0;i<l;i++)
    {
        if(s[i]>='0'&&s[i]<='9')
        printf("%c",s[i]);}
    printf("\n");
}


#include<cstdio>
#include<cstring>
int main()
{   int i;
    char s[100000]={0};
    scanf("%s",s);
    int l=strlen(s);
    for( i=0;i<l;i++)
    if(s[i]=='1')break;
    for(int j=i;j<l;j++)
    if(s[j]=='0'){s[j]='.';break;}
    for(i=0;i<l;i++)
     if(s[i]=='1')break;
    for(int j=i;j<l;j++)
        {if(s[j]>='0'&&s[j]<='9')
        printf("%c",s[j]);}
    printf("\n");
}


// Algorithm    :
// Type         :
// Order        :

#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string>
#include <string.h>
#include <sstream>
#include <math.h>
#include <cmath>
#include <stack>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <list>
#include <bitset>
#include <list>
#include <complex>
using namespace std;

#define ll long long
#define ld long double

typedef pair<int,int> ii;
typedef vector<int> vi;
typedef vector<ii> vii;
typedef complex<double> point;

#define X real()
#define Y imag()
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define L(s) (int)((s).size())
#define C(a,b) memset((a),(b),sizeof(a))
#define all(c) (c).begin(), (c).end()

#define INF (1e15)
#define EPS (1e-9)
#define MOD (1000000007)

int main () {
	string s;
	while(cin >> s) {
		bool yes = 0;
		for(int i=0; i<L(s);i++)
			if(s[i] == '0') {
				s.erase(s.begin() +i);
				yes = 1;
				break;
			}
		if(!yes) {
			s.erase(s.begin()+L(s)-1);
		}
		cout << s << endl;
	}
	return 0;
}


// Algorithm    :
// Type         :
// Order        :

#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string>
#include <string.h>
#include <sstream>
#include <math.h>
#include <cmath>
#include <stack>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <list>
#include <bitset>
#include <list>
#include <complex>
using namespace std;

#define ll long long
#define ld long double

typedef pair<int,int> ii;
typedef vector<int> vi;
typedef vector<ii> vii;
typedef complex<double> point;

#define X real()
#define Y imag()
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define L(s) (int)((s).size())
#define C(a,b) memset((a),(b),sizeof(a))
#define all(c) (c).begin(), (c).end()

#define INF (1e15)
#define EPS (1e-9)
#define MOD (1000000007)

int main () {
    string s;
    while(cin >> s) {
        size_t F = s.find('0');
        s.erase(s.begin() + (F<L(s) ? F : L(s)-1));
        cout << s << endl;
    }
    return 0;
}


// Algorithm    :
// Type         :
// Order        :

#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string>
#include <string.h>
#include <sstream>
#include <math.h>
#include <cmath>
#include <stack>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <list>
#include <bitset>
#include <list>
#include <complex>
using namespace std;

#define ll long long
#define ld long double

typedef pair<int,int> ii;
typedef vector<int> vi;
typedef vector<ii> vii;
typedef complex<double> point;

#define X real()
#define Y imag()
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define L(s) (int)((s).size())
#define C(a,b) memset((a),(b),sizeof(a))
#define all(c) (c).begin(), (c).end()

#define INF (1e15)
#define EPS (1e-9)
#define MOD (1000000007)

int main () {
	string s;
	while(cin >> s) {
		bool yes = 0;
		for(int i=0; i<L(s);i++)
			if(s[i] == '0') {
				s.erase(s.begin() +i);
				yes = 1;
				break;
			}
		if(!yes) {
			s.erase(s.begin()+L(s));
		}
		cout << s << endl;
	}
	return 0;
}


#include <iostream>
#include <string>
using namespace std;
int main () {
    string s;
    while(cin >> s) {
        size_t F = s.find('0');
        s.erase(s.begin() + (F<L(s) ? F : L(s)-1));
        cout << s << endl;
    }
    return 0;
}


#include <cstdio>

int main()
{
    char a,ap;
    ap=getchar();
    bool nf=true;
    int i=0;
    while((a=getchar()) != -1)
    {
    if(nf && ap=='0')
    {
         nf=false;
         ap=a;
         continue;
    }
    putchar(ap);
    ap=a;
    }
if(!nf)
putchar(ap);
}


#include <cstdlib>
#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
#include <math.h>
#include <fstream>

using namespace std;

int main(int argc, char *argv[])
{
    /*int a[3][3];
    for(int i=0;i<3;i++)
    for(int j=0;j<3;j++)
    cin>>a[i][j];
    int mid=0;
    for(int i=1;i<=100000;i++)
    if( (a[1][0]+a[+i) == () && () == ())
    {
        mid=i;
        break;
    }
    if(a[1][0]==a[)*/
    string a;
    cin>>a;
    int witho=0;
    bool withz=false;
    for(int i=0;i<a.size();i++)
    {
            if(a[i]=='0')
            {
                         if(a[i+1]=='1')
                         {
                              //cout<<"ok"<<endl;
                              witho=i;
                              break;
                         }
                         else
                         {
                                         witho=i;
                         }
            }
    }
    //cout<<witho<<endl;
    for(int i=0;i<a.size();i++)
    {
            if(i!=witho)
            cout<<a[i];
    }
    cout<<endl;
    //system("pause");
    return EXIT_SUCCESS;
}


#include <cstdlib>
#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
#include <math.h>
#include <fstream>

using namespace std;

int main(int argc, char *argv[])
{
    string a;
    cin>>a;
    int witho=0;
    bool withz=false;
    for(int i=0;i<a.size();i++)
    {
            if(a[i]=='0')
            {
                         witho=i;
                         break;
            }
    }

    for(int i=0;i<a.size();i++)
    {
            if(i!=witho)
            cout<<a[i];
    }
    cout<<endl;

    return EXIT_SUCCESS;
}


#include <cstdio>

int main()
{
    char a,ap;
    ap=getchar();
    bool nf=true;
    int i=0;
    while(scanf("%c",&a) != EOF)
    {
    if(nf && ap=='0')
    {
         nf=false;
         ap=a;
         continue;
    }
    putchar(ap);
    ap=a;
    }
if(!nf)
putchar(a);
}


#include <cstdio>
#include <iostream>

int main()
{
    char a,ap;
    ap=getchar();
    bool nf=true;
    int i=0;
    while(cin>>a)
    {

    if(nf && ap=='0')
    {
         nf=false;
         continue;
    }
    putchar(ap);
    ap=a;
    }
if(!nf)
putchar(a);
}


#include <cstdio>

int main()
{
    char a,ap;
    ap=getchar();
    bool nf=true;
    int i=0;
    while((a=getchar()) != -1)
    {
    if(nf && ap=='0')
    {
         nf=false;
         ap=a;
         continue;
    }
    putchar(ap);
    ap=a;
    }
printf("/n%c/n",&a);
if(!nf)
putchar(ap);
}


#include <cstdio>

int main()
{
    char a,ap;
    ap=getchar();
    bool nf=true;
    int i=0;
    while(cin>>a)
    {

    if(nf && ap=='0')
    {
         nf=false;
         continue;
    }
    putchar(ap);
    ap=a;
    }
if(!nf)
putchar(a);
}


#include <iostream>
#include <cstring>
#include <cstdio>

using namespace std;

int main()
{
    char a[100001];
    gets(a);
    int x=0,n=strlen(a);
    for(int i=0;i<n;i++)
    if(a[i]=='0')
    {
         x=i;
         break;
    }

    for(int i=0;i<n;i++)
    if(i!=x)
    cout<<a[i];
    cout<<endl;
}


#include <cstdio>

int main()
{
    char a,ap;
    ap=getchar();
    bool nf=true;
    int i=0;
    while((a=getchar()) != EOF)
    {
    if(!(a=='0' || a=='1'))
    break;
    if(nf && ap=='0')
    {
         nf=false;
         ap=a;
         continue;
    }
    putchar(ap);
    ap=a;
    }
if(!nf)
putchar(ap);
}


#include <cstdlib>
#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
#include <math.h>
#include <fstream>

using namespace std;

int main(int argc, char *argv[])
{
    /*int a[3][3];
    for(int i=0;i<3;i++)
    for(int j=0;j<3;j++)
    cin>>a[i][j];
    int mid=0;
    for(int i=1;i<=100000;i++)
    if( (a[1][0]+a[+i) == () && () == ())
    {
        mid=i;
        break;
    }
    if(a[1][0]==a[)*/
    string a;
    cin>>a;
    int witho=0;
    bool withz=false;
    for(int i=0;i<a.size();i++)
    {
            if(a[i]=='0')
            {
                         if(a[i+1]=='1')
                         {
                              //cout<<"ok"<<endl;
                              witho=i;
                              break;
                         }
                         else
                         {
                                         witho=i;
                         }
            }
    }
    cout<<witho<<endl;
    for(int i=0;i<a.size();i++)
    {
            if(i!=witho)
            cout<<a[i];
    }
    cout<<endl;
    //system("pause");
    return EXIT_SUCCESS;
}


#include <cstdio>

int main()
{
    char a,ap;
    ap=getchar();
    bool nf=true;
    int i=0;
    while(scanf("%c",&a) != EOF)
    {
    if(nf && ap=='0')
    {
         nf=false;
         ap=a;
         continue;
    }
    putchar(ap);
    ap=a;
    }
if(!nf)
putchar(ap);
}


#include <cstdio>
#include <iostream>

int main()
{
    char a,ap;
    ap=getchar();
    bool nf=true;
    int i=0;
    while(std::cin>>a)
    {

    if(nf && ap=='0')
    {
         nf=false;
         ap=a;
         continue;
    }
    putchar(ap);
    ap=a;
    }
if(!nf)
putchar(a);
}


#include <cstdio>

int main()
{
    char a,ap;
    ap=getchar();
    bool nf=true;
    int i=0;
    while((a=getchar()) != -1)
    {
    if(nf && ap=='0')
    {
         nf=false;
         ap=a;
         continue;
    }
    putchar(ap);
    ap=a;
    }
printf("\n%c\n",&a);
if(!nf)
putchar(ap);
}


#include <cstdio>
#include <iostream>

int main()
{
    char a,ap;
    ap=getchar();
    bool nf=true;
    int i=0;
    while(std::cin>>a)
    {

    if(nf && ap=='0')
    {
         nf=false;
         continue;
    }
    putchar(ap);
    ap=a;
    }
if(!nf)
putchar(a);
}


#include <cstdio>

int main()
{
    char a,ap;
    ap=getchar();
    bool nf=true;
    int i=0;
    while(scanf("%c",&a))
    {

    if(nf && ap=='0')
    {
         nf=false;
         continue;
    }
    putchar(ap);
    ap=a;
    }
if(!nf)
putchar(a);
}


#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    string a;
    cin>>a;
    int x=0,n=a.size();
    for(int i=0;i<n;i++)
    if(a[i]=='0')
    {
         x=i;
         break;
    }

    for(int i=0;i<n;i++)
    if(i!=x)
    cout<<a[i];
    cout<<endl;

    return EXIT_SUCCESS;
}


#include <iostream>
#include <cstring>

using namespace std;

int main()
{
    char a[100001];
    gets(a);
    int x=0,n=strlen(a);
    for(int i=0;i<n;i++)
    if(a[i]=='0')
    {
         x=i;
         break;
    }

    for(int i=0;i<n;i++)
    if(i!=x)
    cout<<a[i];
    cout<<endl;
}


#include <cstdio>

int main()
{
    char a,ap;
    ap=getchar();
    bool nf=true;
    int i=0;
    while((a=getchar()) != EOF)
    {
    if(nf && ap=='0')
    {
         nf=false;
         ap=a;
         continue;
    }
    putchar(ap);
    ap=a;
    }
if(!nf)
putchar(ap);
}


#include <cstdio>
#include <iostream>

int main()
{
    char a,ap;
    ap=getchar();
    bool nf=true;
    int i=0;
    while((a=getchar()) != -1)
    {
    if(nf && ap=='0')
    {
         nf=false;
         ap=a;
         continue;
    }
    putchar(ap);
    ap=a;
    }
if(!nf)
putchar(ap);
}


#include <iostream>
#include <cstring>

using namespace std;

int main()
{
    char*a;
    cin>>a;
    int x=0,n=strlen(a);
    for(int i=0;i<n;i++)
    if(a[i]=='0')
    {
         x=i;
         break;
    }

    for(int i=0;i<n;i++)
    if(i!=x)
    cout<<a[i];
    cout<<endl;
}


#include <iostream>
#include <cstring>
#include <cstdio>

using namespace std;

int main()
{
    char a[100001];
    gets(a);
    int x=0,n=strlen(a);
    for(int i=0;i<n;i++)
    if(a[i]=='0')
    {
         x=i;
         break;
    }

    for(int i=0;i<n;i++)
    if(i!=x)
    putchar(a[i]);
    cout<<endl;
}


#include <cstdio>

int main()
{
    char a,ap;
    ap=getchar();
    bool nf=true;
    int i=0;
    while((a=getchar()) != -1)
    {
    if(nf && ap=='0')
    {
         nf=false;
         ap=a;
         continue;
    }
    putchar(ap);
    ap=a;
    }
printf("\n%c\n",&ap);
if(!nf)
putchar(ap);
}


#include <iostream>
#include <cstring>

using namespace std;

int main()
{
    char a[100001];
    cin>>a;
    int x=0,n=strlen(a);
    for(int i=0;i<n;i++)
    if(a[i]=='0')
    {
         x=i;
         break;
    }

    for(int i=0;i<n;i++)
    if(i!=x)
    cout<<a[i];
    cout<<endl;
}


#include <iostream>

using namespace std;

int main()
{
    string a;
    cin>>a;
    int x=0,n=a.size();
    for(int i=0;i<n;i++)
    if(a[i]=='0')
    {
         x=i;
         break;
    }

    for(int i=0;i<n;i++)
    if(i!=x)
    cout<<a[i];
    cout<<endl;
}


#include <cstdio>

int main()
{
    char a,ap;
    ap=getchar();
    bool nf=true;
    int i=0;
    while(scanf("%с",&a) != -1)
    {

    if(nf && ap=='0')
    {
         nf=false;
         ap=a;
         continue;
    }
    putchar(ap);
    ap=a;
    }
if(!nf)
putchar(a);
}


#include<stdio.h>

char s[100500];

int main()
{
	gets(s);
	int n=0;
	while(s[n]=='1')
    {
        n++;
    }

	if(!s[n])
    {
        n--;
    }

	s[n]=0;
	printf("%s%s\n",s,s+n+1);
	return 0;
}


#include <cstdio>
#include <cstring>
#include <iostream>
#include <map>
#include <vector>
#include <set>
#include <queue>
#include <algorithm>
#include <cmath>
#include <string>
#define eps 1e-6
#define mod 1e9+7
#define PI acos(-1)
#define PB(x) push_back(x)
#define MP(x, y) make_pair(x, y)
using namespace std;

const int maxn = 1e5+10;
typedef long long LL;

string s;

int main()
{
    //freopen("in.txt", "r", stdin);
    //freopen("out.txt", "w", stdout);
    cin >> s;
    int p = -1;
    for(int i = 0; i < s.length(); i++){
        if(s[i] == '0'){
            p = i;
            break;
        }
    }
    if(s == "1" || s == "0"){
        cout << 0 << endl;
    }
    else if(p == -1){
        for(int i = 1; i < s.length(); i++)cout << s[i];
        cout << endl;
    }
    else{
        for(int i = 0; i < p; i++)cout << s[i];
        for(int i = p+1; i < s.length(); i++)cout << s[i];
        cout << endl;
    }
    return 0;
}


#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
#define maxn 1005
using namespace std;

int main()
{
    char a[maxn];

    scanf("%s", a);
    int p = 0;
    if(strstr(a, "0"))
    {
        for(int i = 0; i < strlen(a); i++)
        {
            if(a[i] == '0' && !p)
            {
                p = 1;
                continue;
            }
            printf("%c", a[i]);
        }
        puts("");
    }
    else
    {
        a[strlen(a)-1] = '\0';
        printf("%s\n",a);
    }
}


#include<stdio.h>

char s[100500];

int main()
{
	gets(s);
	int n=0;
	while(s[n]=='1')
    {
        n++;
        if(!s[n])
        {
            n--;
        }
    }
    s[n]=0;
	printf("%s%s\n",s,s+n+1);

	return 0;
}


#include <stdio.h>
#include <string.h>
#include<cmath>

#define PI 3.1415926535898
char aa[1000000];

int main()
{
    int i, j, n;

    gets(aa);
    n = strlen(aa);
    for(i=0;i<n-1; i++)
    {
        if(aa[i]=='0')
            break;
        printf("%c", aa[i]);
    }
    i++;
    for(; i<n; i++)
        printf("%c", aa[i]);
    puts("");
    return 0;
}


#include<stdio.h>
#include<string.h>
char c[100005];
int bj,len,wz;
int main()
{
  gets(c);
  len=strlen(c);
  for(int i=0;i<len;i++)
    if(c[i]=='0')
    {
      c[i]=0;
      wz=i+1;
      break;
	}
  if(wz)printf("%s%s\n",c,c+wz);
  else printf("%s\n",c+1);
  return 0;
}


#include <stdio.h>
#include <string.h>

int main(void){
  char s[100010];

  scanf("%s", &s);
  int len = strlen(s), flag = 0, i;
  for (i = 0; i < len; i++){
    if (s[i] == '0'){
      flag = i;
      break;
    }
  }
  for ( i = flag; i < len - 1; i++){
    s[i] = s[i + 1];
  }
  s[i] = '\0';
  puts(s);

  return 0;
}


#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define MAXN 100010
char bin[MAXN];
int main() {
	int i;
	while (~scanf("%s", bin)) {
		int maxpos = 0;
		for (i = 0; bin[i] != '\0'; i++) {
			if (bin[i] == '0') {
				maxpos = i;
				break;
			}
		}
		for (i = 0; bin[i] != '\0'; i++) {
			if (i != maxpos) {
				printf("%c", bin[i]);
			}
		}
		printf("\n");
	}
	return 0;
}


#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 1e5+7;
char num[maxn];
int main() {
	while (scanf("%s", num) != EOF) {
		int len = strlen(num);
		bool flag = false;
		for (int i = 0; i < len; i++) {
			if (num[i] == '0') {
				num[i] = '2';
				flag = true;
				break;
			}
		}
		if (!flag) {
			for (int i = 0; i < len-1; i++) printf("%c", '1');
			printf("\n");
		}
		else {
			for (int i = 0; i < len; i++) {
				if (num[i] != '2') printf("%c", num[i]);
			}
			printf("\n");
		}
	}
	return 0;
}


#include <stdio.h>
#include <string.h>
char arr[100005]={0};
int main( void)
{
    int i=0, j, k;
    scanf("%s", arr);
    i = strlen(arr);
    for( j=0; j < i - 1; j++)
    {
        if(arr[j]=='0')
        {
            break;
        }
    }
    for( k=0; k < i; k++)
    {
        if(k != j)
        {
            printf("%c", arr[k]);
        }
    }
    return 0;
}


#include<cstdio>
#include<string.h>
#include<math.h>
#include<iostream>
#define maxn 10005
using namespace std;
int main ()
{
    char a[maxn];
    int i, j, flag = 0;
    int len1;
    gets(a);
    len1 = strlen(a);
    for (i = 0; i < len1; i++)if (a[i] == '0')
    {
        j = i;
        flag = 1024;
        break;
    }
    if (flag != 0)
    {
        for (i = 0; i < len1; i++) if (i != j) printf("%c",a[i]);
    }
    else
        for (i = 0; i < len1; i++) printf("%c", a[i]);
    return 0;
}


#include<cstdio>
#include<string.h>
#include<math.h>
#include<iostream>
#define maxn 10005
using namespace std;
int main ()
{
    string a;
    int i, j, flag = 0;
    int len1;
    cin>>a;
    len1 = a.size();
    for (i = 0; i < len1; i++)if (a[i] == '0')
    {
        j = i;
        flag = 1024;
        break;
    }
    if (flag != 0)
    {
        for (i = 0; i < len1; i++) if (i != j) cout<<a[i];
        cout<<endl;
    }
    else
        for (i = 0; i < len1; i++) cout<<a[i];
        cout<<endl;
    return 0;
}


#include<cstdio>
#include<cstring>
int main()
{
    char ss[100005];
    int l, i, j;
    scanf("%s", ss);
    l = strlen(ss);
    for(i = 0; i < l; i++)
        if( ss[i]=='0') break;
    if(i == l) i -= 2;
    for( j=0; j<i; j++)
        printf("%c", ss[j]);
    for( j=i+1; j<l; j++)
        printf("%c", ss[j]);
    return 0;
}


#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
#define maxn 100005
using namespace std;

int main()
{
    char a[maxn];

    scanf("%s", a);
    int p = 0;
    if(strstr(a, "0"))
    {
        for(int i = 0; i < strlen(a); i++)
        {
            if(a[i] == '0' && !p)
            {
                p = 1;
                continue;
            }
            printf("%c", a[i]);
        }
        puts("");
    }
    else
    {
        a[strlen(a)-1] = '\0';
        printf("%s\n",a);
    }
}


#include<stdio.h>
#include <iostream>
using namespace std;
string s;

int main()
{
	cin>>s;
	int p = s.find('0');
	//printf("%d\n", p);
	if (p != -1) {
        for (int i = 0; i < s.size(); i++) {
            if (p == i) {
                continue;
            }
            printf("%c", s[i]);
        }
	}
	else {
        for (int i = 1; i < s.size(); i++) {
            printf("%c", s[i]);
        }
	}

	printf("\n");
	return 0;
}


#include<cstdio>
#include<string.h>
#include<math.h>
#include<iostream>
#define maxn 10005
using namespace std;
int main ()
{
    char a[maxn];
    int flag = -1024;
    scanf("%s", a);
    int len1 = strlen(a);
    for (int i = 0; i < len1; i++)if (a[i] == '0')
    {
        flag = i;
        break;
    }
    if (flag == -1024) flag = 0;
    for (int i = 0; i < len1; i++)if (i != flag)printf("%c", a[i]);
    printf("\n");
    return 0;
}


#include<cstdio>
#include<string.h>
#include<math.h>
#include<iostream>
#define maxn 10005
using namespace std;
int main ()
{
    string a;
    int i, j, flag = 0;
    int len1;
    cin>>a;
    len1 = a.size();
    for (i = 0; i < len1; i++)if (a[i] == '0')
    {
        j = i;
        flag = 1024;
        break;
    }
    if (flag != 0)
    {
        for (i = 0; i < len1; i++) if (i != j) cout<<a[i];
        cout<<endl;
    }
    else
        for (i = 0; i < len1 -1; i++) cout<<a[i];
        cout<<endl;
    return 0;
}


#include <stdio.h>
#include <string.h>
#include<math.h>

char a[1000010];

int main()
{
    int i, j, len;

    gets(a);
    len = strlen(a);
    for(i=0;i<len-1; i++)
    {
        if(a[i]=='0')
            break;
        printf("%c", a[i]);
    }
    i++;
    for(; i<len; i++){
        printf("%c", a[i]);
    }
    printf("\n");
    return 0;
}


#include <iostream>
#include <string>
using namespace std;

int main()
{
    string s;
    cin >> s;
    if(s.size() == 1) {cout << s << endl; return 0;}
    for(int i = 0; i < s.size(); i++){
        if (i == 0 && s[i] == '1') break;
        if(s[i] == '0') {
            s.erase(i,1);
            if(s[i]=='1') break;
            i--;
        }
    }
    for(int i = 0; i < s.size(); i++){
        if(s[i] == '0') {
            s.erase(i,1);
            break;
        }
    }
    cout << s << endl;
    return 0;
}


#include <iostream>
#include <string>
using namespace std;

int main()
{
    string s;
    cin >> s;
    for(int i = 0; i < s.size(); i++){
        if(s[i] == '0') {s.erase(i,1); break;}
    }
    cout << s << endl;
    return 0;
}


#include <iostream>
#include <string>
using namespace std;

int main()
{
    string s;
    cin >> s;
    if(s.size() == 1) {cout << s << endl; return 0;}
    for(int i = 0; i < s.size(); i++){
        if(s[i] == '0') {
            s.erase(i,1);
            if(s[i]=='1') break;
            i--;
        }
    }
    for(int i = 0; i < s.size(); i++){
        if(s[i] == '0') {
            s.erase(i,1);
            break;
        }
    }
    cout << s << endl;
    return 0;
}


#include <iostream>
#include <string>
using namespace std;

int main()
{
    string s;
    cin >> s;
    int sz = s.size();
    if(s.size() == 1) {cout << s << endl; return 0;}
    for(int i = 0; i < s.size(); i++){
        if (i == 0 && s[i] == '1') break;
        if(s[i] == '0') {
            s.erase(i,1);
            if(s[i]=='1') break;
            i--;
        }
    }
    for(int i = 0; i < s.size(); i++){
        if(s[i] == '0') {
            s.erase(i,1);
            break;
        }
    }
    if(sz == s.size()) s.erase(1,1);
    cout << s << endl;
    return 0;
}


#include <iostream>
#include <string>
using namespace std;

int main()
{
    string s;
    cin >> s;
    if(s.size() == 1) {cout << s << endl; return 0;}
    for(int i = 0; i < s.size(); i++){
        if (i == 1 && s[i] == '1') break;
        if(s[i] == '0') {
            s.erase(i,1);
            if(s[i]=='1') break;
            i--;
        }
    }
    for(int i = 0; i < s.size(); i++){
        if(s[i] == '0') {
            s.erase(i,1);
            break;
        }
    }
    cout << s << endl;
    return 0;
}


#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <map>
#include <set>
#include <vector>
#include <algorithm>
#include <queue>
#include <bitset>
#include <stack>
#include <iostream>
#include <fstream>
#include <cmath>

#define sqr(a) ((a)*(a))
#define odd(a) ((a)&1)
#define foru(i,n) for (int i=0;i<(n);i++)
#define ford(i,n) for (int i=(n)-1;i>=0;i--)
#define forab(i,l,r) for (int i=(l);i<=(r);i++)
#define forabd(i,r,l) for (int i=(r);i>=(l);i--)
#define pb push_back
#define F first
#define S second
#define all(x) x.begin(),x.end()
#define sz(__X) (int)__X.size()
#define pii pair<int,int>

const double eps=1e-19;
const double PI=acos(-1.0);
const int INF=1000*1000*1000+7;
const int MAXN = 100005;

using namespace std;

char a[MAXN];
bool del;

int main()
{
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
	scanf("%s", a);
	int n=strlen(a);
	for (int i=0; i<n-1; i++)
    {
        if ( del)
        {
            printf("%c", a[i]);
            continue;
        }
        if ( a[i] == '0')
            del = true;
            else printf("%c", a[i]);
    }
    if ( del)
        printf("%c", a[n-1]);
	return 0;
}


#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <map>
#include <set>
#include <vector>
#include <algorithm>
#include <queue>
#include <bitset>
#include <stack>
#include <iostream>
#include <fstream>
#include <cmath>

#define sqr(a) ((a)*(a))
#define odd(a) ((a)&1)
#define foru(i,n) for (int i=0;i<(n);i++)
#define ford(i,n) for (int i=(n)-1;i>=0;i--)
#define forab(i,l,r) for (int i=(l);i<=(r);i++)
#define forabd(i,r,l) for (int i=(r);i>=(l);i--)
#define pb push_back
#define F first
#define S second
#define all(x) x.begin(),x.end()
#define sz(__X) (int)__X.size()
#define pii pair<int,int>

const double eps=1e-19;
const double PI=acos(-1.0);
const int INF=1000*1000*1000+7;
const int MAXN = 100005;

using namespace std;

char a[MAXN];
bool del;

int main()
{
    //freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);
    scanf("%s", a);
    for (int i=0; i<strlen(a)-1; i++)
    {
        if ( del)
        {
            printf("%c", a[i]);
            continue;
        }
        if ( a[i] == '0')
            del = true;
            else printf("%c", a[i]);
    }
    if ( del)
        printf("%c", a[strlen(a)-1]);
    return 0;
}


#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <map>
#include <set>
#include <vector>
#include <algorithm>
#include <queue>
#include <bitset>
#include <stack>
#include <iostream>
#include <fstream>
#include <cmath>

#define sqr(a) ((a)*(a))
#define odd(a) ((a)&1)
#define foru(i,n) for (int i=0;i<(n);i++)
#define ford(i,n) for (int i=(n)-1;i>=0;i--)
#define forab(i,l,r) for (int i=(l);i<=(r);i++)
#define forabd(i,r,l) for (int i=(r);i>=(l);i--)
#define pb push_back
#define F first
#define S second
#define all(x) x.begin(),x.end()
#define sz(__X) (int)__X.size()
#define pii pair<int,int>

const double eps=1e-19;
const double PI=acos(-1.0);
const int INF=1000*1000*1000+7;
const int MAXN = 100005;

using namespace std;

char a[MAXN];
bool del;

int main()
{
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
	scanf("%s", a);
	for (int i=0; i<strlen(a)-1; i++)
    {
        if ( del)
        {
            printf("%c", a[i]);
            continue;
        }
        if ( a[i] == '0')
            del = true;
            else printf("%c", a[i]);
    }
    if ( del)
        printf("%c", a[strlen(a)-1]);
	return 0;
}


#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <map>
#include <set>
#include <vector>
#include <algorithm>
#include <queue>
#include <bitset>
#include <stack>
#include <iostream>
#include <fstream>
#include <cmath>

#define sqr(a) ((a)*(a))
#define odd(a) ((a)&1)
#define foru(i,n) for (int i=0;i<(n);i++)
#define ford(i,n) for (int i=(n)-1;i>=0;i--)
#define forab(i,l,r) for (int i=(l);i<=(r);i++)
#define forabd(i,r,l) for (int i=(r);i>=(l);i--)
#define pb push_back
#define F first
#define S second
#define all(x) x.begin(),x.end()
#define sz(__X) (int)__X.size()
#define pii pair<int,int>

const double eps=1e-19;
const double PI=acos(-1.0);
const int INF=1000*1000*1000+7;
const int MAXN = 100005;

using namespace std;

string a;
bool del;

int main()
{
    //freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);
    cin>>a;
    for (int i=0; i<a.size()-1; i++)
    {
        if ( del)
        {
            printf("%c", a[i]);
            continue;
        }
        if ( a[i] == '0')
            del = true;
            else printf("%c", a[i]);
    }
    if ( del)
        printf("%c", a[a.size()-1]);
    return 0;
}


#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
#include<cstdlib>
#include<cmath>
using namespace std;
char s[100009];
int main() {
    scanf("%s",s);
    int l=strlen(s);
    int i;
    for(i=0;i<l;++i){
        if(s[i]=='1'){
            if(s[i+1]=='0'&&i+1<l)
            {
                break;
            }
        }
    }
        for(int j=i+1;j<l;++j){
            s[j]=s[j+1];
        }
        puts(s);
    return 0;
}
/*2018-08-04 20:03:02.934*/


#include<stdio.h>
#include<string.h>
using namespace std;
chae a[100005];
int main()
{

    int n;
    while(~scanf("%s",a))
    {
        n=strlen(a);
        int sum=0;
        int num;
        for(int i=0;i<n;i++)
        {
            if(a[i]=='0')
            {
                num=i;
                break;
            }
        }
        for(int i=0;i<n;i++)
        {
            if(i==num)
            {
                continue;
            }
            printf("%c",a[i]);
        }
    }
}
/*2018-08-04 19:56:54.966*/


#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
char str[100005];
int main()
{
  scanf("%s",&str);
  int len=strlen(str),flag=0;
  for(int i=0;i<len;i++)
  {
   if(str[i]=='0')
     flag=1;
   if(flag)
   {
     str[i]=str[i+1];
   }
  }
  if(flag==0)
    str[len-1]='\0';
  printf("%s\n",str);
  return 0;
}
/*2018-08-04 20:01:15.844*/


#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
char a[100010];
int main()
{
    scanf("%s",a);
    int flag=1,l=strlen(a);
    for(int i=0;i<l;i++)
    {
        if(a[i]=='0'&&flag)
        {
            flag=0;
            continue;
        }
        if(i==l-1&&flag)
            continue;
        printf("%c",a[i]);
    }
    printf("\n");
    return 0;
}
/*2018-08-04 19:44:17.138*/


#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
char a[100010];
int main()
{
    scanf("%s",a);
    int flag=1,l=strlen(a);
    for(int i=0;i<l;i++)
    {
        if(a[i]=='0'&&flag)
        {
            flag=0;
            continue;
        }
        if(i==l-1&&flag)
            continue;
        printf("%c",a[i]);
    }
    printf("\n");
    return 0;
}/*2018-08-04 19:55:19.672*/


#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
char a[100010];
int main()
{
    scanf("%s",a);
    int flag=1,l=strlen(a);
    for(int i=0;i<l;i++)
    {
        if(a[i]=='0'&&flag)
        {
            flag=0;
            continue;
        }
        if(i==l-1&&flag)
            continue;
        printf("%c",a[i]);
    }
    printf("\n");
    return 0;
}
/*2018-08-04 19:42:54.02*/


#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
char a[100010];
int main()
{
    scanf("%s",a);
    int flag=1,l=strlen(a);
    for(int i=0;i<l;i++)
    {
        if(a[i]=='0'&&flag)
        {
            flag=0;
            continue;
        }
        if(i==l-1&&flag)
            continue;
        printf("%c",a[i]);
    }
    printf("\n");
    return 0;
}/*2018-08-04 19:54:08.244*/


#include<stdio.h>
#include<string.h>
using namespace std;
char str[100005];
char num[100005];
int main()
{
    scanf("%s",str);
    int len = strlen(str);
    int flag = 0;
    int q = 0;
    for(int i = 0;i<len;i++)
    {
         if(str[i] == '0' && flag == 0)
         {
             flag = 1;
             continue;
         }
         num[q++] = str[i];
    }
    num[len-1] = 0;
    printf("%s",num);
}
/*2018-08-04 19:53:20.464*/


#include<cstdio>
#include<queue>
#include<cstring>
#include<cstdlib>
#include<cmath>
using namespace std;
main()
{
    char in[100010];
    char mark[100010];
    int flag=1;
    memset(mark,-1,sizeof(mark));
    scanf("%s",in);
    int len=strlen(in);
    for(int i=0;i<len;i++)
    {
        if(in[i]=='0')
            {
                mark[i]=2;
                flag=0;
                break;
            }
    }
    if(flag)
    {
        in[len-1]='\0';
        printf("%s",in);
    }
    else
    {
        for(int i=0;i<len;i++)
        {
            if(mark[i]==-1)
                printf("%c",in[i]);
        }
    }
    return 0;
}
/*2018-08-04 20:05:10.906*/


#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
using namespace std;
int main()
{
    int n;
    char s[100001];
    scanf("%s",s);
    n=strlen(s);
    int i=0;
    while(s[i]!='0'&&i<n-1)
    {
        printf("%c",s[i]);
        i++;
    }
    i++;
    while(i<n)
    {
        printf("%c",s[i]);
        i++;
    }
    printf("\n");
    return 0;
}
/*2018-08-04 19:57:13.46*/


#include<stdio.h>
#include<string>
#include<string.h>
#include<set>
#include<queue>
#include<math.h>
#include<stack>
#include<vector>
#include<map>
#include<cmath>
#include<stdlib.h>
#include<algorithm>
using namespace std;
#define ll long long
const int maxn=1e5+5;
const int inf=0x3F3F3F3F;
char c[maxn];
int main()
{
    int i;
    scanf("%s", c);
    for(i=0; c[i]; i++)
        if(c[i]=='0'||c[i+1]=='\0')
            break;
        else
            printf("%c",c[i]);
    for(i=i+1; c[i]; i++)
        printf("%c",c[i]);
    return 0;
}
/*2018-08-04 19:51:51.139*/


#include <stdio.h>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <cmath>
#include <cstring>
#include <algorithm>

using namespace std;

int main()
{
	int i, jafoi=0;
	char s[100005];
	gets(s);
	tam = strlen(s).
	for(i=0;i<tam;i++)
	{
		if(s[i]=='1')
		{
			printf("1");
		}
		else if(jafoi)
		{
			printf("0");
		}
		else
			jafoi=1;
	}
	return 0;
}


#include <stdio.h>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <cmath>
#include <cstring>
#include <algorithm>

using namespace std;

int main()
{
	int i, jafoi=0, tam;
	char s[100005];
	gets(s);
	tam = strlen(s);
	for(i=0;i<tam;i++)
	{
		if(s[i]=='1')
		{
			printf("1");
		}
		else if(jafoi)
		{
			printf("0");
		}
		else
			jafoi=1;
	}
	return 0;
}


#include <stdio.h>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <cmath>
#include <cstring>
#include <algorithm>

using namespace std;

int main()
{
	int i, jafoi=0;
	char s[100005];
	gets(s);
	for(i=0;i<strlen(s);i++)
	{
		if(s[i]=='1')
		{
			printf("1");
		}
		else if(jafoi)
		{
			printf("0");
		}
		else
			jafoi=1;
	}
	return 0;
}


#include <stdio.h>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <cmath>
#include <cstring>
#include <algorithm>

using namespace std;

int main()
{
	int i, jafoi=0, tam;
	char s[100005];
	gets(s);
	tam = strlen(s);
	for(i=0;i<tam;i++)
	{
		if(i+1==tam && !jafoi);
		else
		{
			if(s[i]=='1')
			{
				printf("1");
			}
			else if(jafoi)
			{
				printf("0");
			}
			else
				jafoi=1;
		}
	}
	return 0;
}


#include <stdio.h>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <cmath>
#include <cstring>
#include <algorithm>

using namespace std;

int main()
{
	int i, jafoi=0;
	char s[100005];
	gets(s);
	tam = strlen(s);
	for(i=0;i<tam;i++)
	{
		if(s[i]=='1')
		{
			printf("1");
		}
		else if(jafoi)
		{
			printf("0");
		}
		else
			jafoi=1;
	}
	return 0;
}


#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;

int main(){
    string str;
    int a;
    int f=0;
    cin>>str;
    for(int i=0;i<str.length();i++){
        if(str[i]=='0'){
            a=i;
            f=1;
            break;
        }
    }
    if(a==0){
        while(str[a]==str[a+1])
            a++;
        str.erase(0,a);
        a=0;
    }
    if(f){
        string str2=str;
        str.erase(a,str.length());
        str2.erase(0,a+1);
        cout<<str<<str2<<endl;
    }
    else{
        str[str.length()-1]='\0';
        cout<<str<<endl;
    }
    return 0;
}


#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;

string str;

int main()
{
    cin>>str;
    int i=0;
    while(str[i]=='1' && i!=str.size()-1) {cout<<'1';i++; }
    i++;
    while(i!=str.size()){ cout<<str[i];i++;}
    cout<<endl;
    return 0;
}


#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;

int main(){
    string str;
    int a;
    int f=0;
    cin>>str;
    for(int i=0;i<str.length();i++){
        if(str[i]=='0'){
            a=i;
            f=1;
            break;
        }
    }
    if(a==0){
        while(str[a]==str[a+1])
            a++;
        str.erase(0,a);
        a=0;
    }
    if(str.length()==1)
        cout<<str<<endl;
    else{
        if(f){
            string str2=str;
            str.erase(a,str.length());
            str2.erase(0,a+1);
           // str.append(str2);
            cout<<str<<str2<<endl;
        }
        else{
            str.erase(str.length()-1,str.length());
            cout<<str<<endl;
        }
    }
    return 0;
}


#include<bits/stdc++.h>
using namespace std;

char na[123456];
char ans[123456];

int main()
{
    scanf("%s", na);
    int y = strlen(na);
    int flag = 0;
    for(int i=0; i<y; i++)
    {
        if(na[i] == '0')
        {
            na[i] = 'y';
            flag = 1;
            break;
        }
    }
    if(flag == 1)
    {
        int len = 0;
        for(int i=0; i<y; i++)
        {
            if(na[i] != 'y')
            {
                ans[len++] = na[i];
            }
        }
        ans[len] = '\0';
        printf("%s\n", ans);
    }
    else
    {
        int len = 0;
        for(int i=0; i<y-1; i++)
        {
            if(na[i] != 'y')
            {
                ans[len++] = na[i];
            }
        }
        ans[len] = '\0';
        printf("%s\n", ans);
    }
    return 0;
}


#include<iostream>

using namespace std;

int main()
{
    string s;
    cin>>s;
    int zero = s.find('0');
    if (zero != -1){s.erase(zero,1);}
    else s.erase(1,1);
    cout<<s;
    return 0;
}


#include <iostream>

using namespace std;

string compare(string s1,string s2){
    int l = s1.length();
    int cursor1 = 0,cursor2 = 0;
    while(cursor1 < l && cursor2 < l){
        if(s1[cursor1] == NULL){cursor1++;}
        if(s2[cursor2] == NULL){cursor2++;}
        if(s1[cursor1] > s2[cursor2]){return s1;}
        cursor1++;
        cursor2++;
    }

    return s2;
}

int main()
{
    string s,answer = "0";
    cin>>s;
    int n = s.length();
    for(int i=0;i<n;i++){
        string s2 = s;
        s2[i] = NULL;
        answer = compare(answer,s2);
    }
    for(int i=0;i<n;i++)
        if(answer[i] != NULL)
            cout<<answer[i];
    return 0;
}


#include <iostream>

using namespace std;

string compare(string s1,string s2){
    int l = s1.length();
    int cursor1 = 0,cursor2 = 0;
    while(cursor1 < l && cursor2 < l){
        if(s1[cursor1] == NULL){cursor1++;}
        if(s2[cursor2] == NULL){cursor2++;}
        if(s1[cursor1] > s2[cursor2]){return s1;}
        cursor1++;
        cursor2++;
    }

    return s2;
}

int main()
{
    string s,answer = "0";
    cin>>s;
    int n = s.length();
    for(int i=0;i<n;i++){
        if(s[i] =='0')
        {
            string s2 = s;
            s2[i] = NULL;
            answer = compare(answer,s2);
        }
    }
    for(int i=0;i<n;i++)
        if(answer[i] != NULL)
            cout<<answer[i];
    return 0;
}


#include <iostream>

using namespace std;

string compare(string s1,string s2){
    int l = s1.length();
    int cursor1 = 0,cursor2 = 0;
    while(cursor1 < l && cursor2 < l){
        if(s1[cursor1] == NULL){cursor1++;}
        if(s2[cursor2] == NULL){cursor2++;}
        if(s1[cursor1] > s2[cursor2]){return s1;}
        if(s1[cursor1] < s2[cursor2]){return s2;}
        cursor1++;
        cursor2++;
    }
    return s1;
}

int main()
{
    string s,answer = "0";
    cin>>s;
    int n = s.length();
    for(int i=0;i<n;i++){
        string s2 = s;
        s2[i] = NULL;
        answer = compare(answer,s2);
    }
    for(int i=0;i<n;i++)
        if(answer[i] != NULL)
            cout<<answer[i];
    return 0;
}


#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <algorithm>
#include <stack>
#include <queue>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <list>
#include <sstream>
#include <istream>
#include <fstream>
#include <string.h>

#define SIZE  10
#define SIZE2 10000000

using namespace std;

int main()
{
  string line,num;
  int flag=1,res;

  cin>>line;
  for(int i=0;i<line.size();i++)
  {
    if(line[i]=='0' && flag)
    {
      flag=0;
    }
    else
    {
      num +=line[i];
    }
  }

  if(flag)
  {
     int sz = num.size()-1;
    for(int i=0;i<sz;i++) cout<<num[i];
  }
  else
    cout<<num;

  cout<<endl;
  return 0;
}


#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<sstream>
#include<cassert>
#include<queue>
#include<stack>
#include<bitset>
#include<cstring>

#define REP(i,b,n) for(int i=b;i<n;i++)
#define rep(i,n)   REP(i,0,n)
#define ALL(C)     (C).begin(),(C).end()
#define FOR(it,o)  for(__typeof((o).begin()) it=(o).begin(); it!=(o).end(); ++it)

using namespace std;
const long double EPS = 0.000000001;
const long double INF = 1000000001;
typedef long long lli;
int main(){
  int n;
  cin >> n;
  vector<int> pos(n);
  rep(i, n)cin >> pos[i];
  sort(ALL(pos));
  long double left= 0, right = INF, ans[3], d = INF;
  while(right - left > EPS){
    long double now = (left + right)/2, tmp[3];
    vector<int>::iterator p = pos.begin();
    rep(i, 3){
      tmp[i] = now + (*p);
      p = upper_bound(p, pos.end() , now*2 + (*p) );
    }
    if(p == pos.end()){
      if(now < d){
        rep(i, 3){
        ans[i] = tmp[i];
        if(i > 0 && ans[i] < ans[i-1])ans[i] = ans[i-1];
        }
        d = min(d, now);
      }
      right = now;
    }
    if(p != pos.end()){
      left = now;
    }
  }
  if(d > INF - 100)assert(false);
  sort(ans, ans+3);
  printf("%.6lf\n",(double)d);
  printf("%.6lf %.6lf %.6lf\n", (double)ans[0], (double)ans[1], (double)ans[2]);
  return 0;
}


#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<sstream>
#include<cassert>
#include<queue>
#include<stack>
#include<bitset>
#include<cstring>

#define REP(i,b,n) for(int i=b;i<n;i++)
#define rep(i,n)   REP(i,0,n)
#define ALL(C)     (C).begin(),(C).end()
#define FOR(it,o)  for(__typeof((o).begin()) it=(o).begin(); it!=(o).end(); ++it)

using namespace std;
const double EPS = 0.000000001;
const double INF = 1000000001;
typedef long long lli;
int main(){
  int n;
  cin >> n;
  vector<int> pos(n);
  rep(i, n)cin >> pos[i];
  sort(ALL(pos));
  double left= 0, right = INF, ans[3], d = INF;
  while(right - left > EPS){
    double now = (left + right)/2, tmp[3];
    vector<int>::iterator p = pos.begin();
    rep(i, 3){
      tmp[i] = now + (*p);
      p = upper_bound(p, pos.end() , now*2 + (*p) );
    }
    if(p == pos.end()){
      if(now < d){
        rep(i, 3){
        ans[i] = tmp[i];
        if(i > 0 && ans[i] < ans[i-1])ans[i] = ans[i-1];
        }
        d = min(d, now);
      }
      right = now;
    }
    if(p != pos.end()){
      left = now;
    }
  }
  //if(d > INF - 100)assert(false);
  sort(ans, ans+3);
  printf("%.6lf\n",d);
  printf("%.6lf %.6lf %.6lf\n", ans[0], ans[1], ans[2]);
  return 0;
}


#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<sstream>
#include<cassert>
#include<queue>
#include<stack>
#include<bitset>
#include<cstring>

#define REP(i,b,n) for(int i=b;i<n;i++)
#define rep(i,n)   REP(i,0,n)
#define ALL(C)     (C).begin(),(C).end()
#define FOR(it,o)  for(__typeof((o).begin()) it=(o).begin(); it!=(o).end(); ++it)

using namespace std;
const double EPS = 0.0000001;
const double INF = 1000000001;
typedef long long lli;
int main(){
  int n;
  cin >> n;
  vector<int> pos(n);
  rep(i, n)cin >> pos[i];
  sort(ALL(pos));
  double left= 0, right = INF, ans[3], d = INF;
  while(right - left > EPS){
    double now = (left + right)/2, tmp[3];
    vector<int>::iterator p = pos.begin();
    rep(i, 3){
      tmp[i] = now + (*p);
      if(p == pos.end())continue;
      p = upper_bound(p, pos.end() , (int)floor(now*2 + (*p)) );
    }
    if(p == pos.end()){
      if(now < d){
        rep(i, 3){
        ans[i] = tmp[i];
        if(i > 0 && ans[i] < ans[i-1])ans[i] = ans[i-1];
        }
        d = min(d, now);
      }
      right = now;
    }
    if(p != pos.end()){
      left = now;
    }
  }
  sort(ans, ans+3);
  printf("%.6lf\n",d);
  printf("%.6lf %.6lf %.6lf\n", ans[0], ans[1], ans[2]);
  return 0;
}