#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
int n,ans;
int a[N],cnt[N],ch1[N],ch2[N],dp[N],sto1[N],sto2[N];
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		a[i]%=200;
		if(!a[i])a[i]=200;
	}
	dp[0]=1;
	for(int i=1;i<=n;i++)
		for(int j=1e4;j>=a[i];j--)
		{
			dp[j]+=dp[j-a[i]];
			if(dp[j-a[i]])
			{
				if(ch1[j])ch2[j]=ch1[j];
				ch1[j]=i;
			}
		}
	for(int i=1;i<=1e4;i++)
	{
		if(dp[i]>=2)
		{
			ans=i;
			break;
		}
		if(dp[i])cnt[i%200]++;
	}
	if(ans)
	{
		int cnt1=0,cnt2=0,x=ans,y=ans;
//		cout<<ans<<endl;
//		cout<<ch2[31]<<endl;
		while(x)
		{
			sto1[++cnt1]=ch1[x];
			x-=a[ch1[x]];
			
		}
		while(y)
		{
			if(!ch2[y])ch2[y]=ch1[y];
			sto2[++cnt2]=ch2[y];
			y-=a[ch2[y]];
//			printf("%d ",ch2[y]);
		}
		sort(sto1+1,sto1+cnt1+1);
		sort(sto2+1,sto2+cnt2+1);
		sto1[0]=cnt1;sto2[0]=cnt2;
		printf("Yes\n");
		for(int i=0;i<=cnt2;i++)printf("%d ",sto2[i]);
		cout<<endl;
		for(int i=0;i<=cnt1;i++)printf("%d ",sto1[i]);
	}
	else 
	{
		ans=-1;
		for(int i=0;i<=200;i++)
		{
			if(cnt[i]>=2)
			{
				ans=i;
				break;
			}
		}
		if(ans==-1)
		{
			printf("No");
			return 0;
		}
		int ans1=-1,ans2=-1;
		for(int i=0;i<=200;i++)
		{
			if(dp[i*200+ans]&&ans1==-1)
			{
				ans1=i*200+ans;
			}
			else if(dp[i*200+ans]&&ans2==-1)
			{
				ans2=i*200+ans;
				break;
			}
		}
		int cnt1=0,cnt2=0;
		while(ans1)
		{
			sto1[++cnt1]=ch1[ans1];
			ans1-=a[ch1[ans1]];
		}
		while(ans2)
		{
			sto2[++cnt2]=ch1[ans2];
			ans2-=a[ch1[ans2]];
		}
		sort(sto1+1,sto1+cnt1+1);
		sort(sto2+1,sto2+cnt2+1);
		sto1[0]=cnt1;sto2[0]=cnt2;
		printf("Yes\n");
		for(int i=0;i<=cnt2;i++)printf("%d ",sto2[i]);
		cout<<endl;
		for(int i=0;i<=cnt1;i++)printf("%d ",sto1[i]);
	}
}
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
#define fast_io ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);

void rec(int *idx, int s, int baki, function<void(int *)> fun)
{
    if (baki == 0) fun(idx);
    else
    {
        if (s < 0) return;
        rec(idx, s - 1, baki, fun);
        idx[baki - 1] = s;
        rec(idx, s - 1, baki - 1, fun);
    }
}

void cmb(int n, int k, function<void(int *)> fun)
{
    int idx[k];
    rec(idx, n - 1, k, fun);
}

ll ok;
vector<ll> a;
vector<vector<vector<ll>>> vec;

int main()
{
    fast_io;
    #ifndef ONLINE_JUDGE
        freopen("input.txt", "r", stdin);
        freopen("output.txt", "w", stdout);
    #endif

    ll n;
    cin >> n;
    a = vector<ll>(n);
    vec = vector<vector<vector<ll>>>(200);

    for (int i = 0; i < n; i++)
    {
        cin >> a[i];
        a[i] %= 200;
    }

    for (int i = 1; i <= n; i++)
    {
        ok = i;
        cmb(n, i, [](int *ind)
        {
            vector<ll> t;
            ll ts = 0;
            for (int j = 0; j < ok; j++)
            {
                t.push_back(ind[j] + 1);
                ts += a[ind[j]];
            }
            if (vec[ts % 200].size() <= 0) vec[ts % 200].push_back(t);
            else
            {
                cout << "YES" << endl;
                cout << vec[ts % 200][0].size();
                for (auto pl : vec[ts % 200][0]) cout << " " << pl;
                cout << endl;
                cout << t.size();
                for (auto pl : t) cout << " " << pl;
                cout << endl;
                exit(0);
            }
        });
    }

    cout << "NO" << endl;

    return 0;
}