#include <bits/stdc++.h>
#define ll long long
#define md 1000000007
using namespace std;
int main(){
ll n,i,j,a[201],dp[201][201],flg,rm,id[2]={-1,-1},bigval=md,k,num;
vector<ll> v[2];
bigval-=7;
bigval*=400;
cin>>n;

memset(dp,0,sizeof(dp));

for(i=0;i<n;i++)
	cin>>a[i];

dp[a[0]%200][0]=1;

for(i=1;i<n;i++){
	for(j=0;j<200;j++)
		dp[j][i]=dp[j][i-1];
	
	dp[a[i]%200][i]++;
	
	for(j=0;j<200;j++)
		if(dp[j][i-1]) dp[(j+a[i])%200][i]++;
	
}
flg=0;
for(i=0;i<200;i++)
if(dp[i][n-1]>1) {flg=1; break;}

if(flg==0) cout<<"No";

else {
	rm = i;num=0;
	cout<<"Yes\n";
	
	for(i=n-1;i>0;i--){
		if(dp[rm][i]>dp[rm][i-1]) id[num++]=i;
		if(num==2) break;
	}
	if(id[1]==-1) id[1]=0;
	
	
	for(i=0;i<2;i++){
		
		num=rm;
		for(j=id[i];j>-1;){
		num = (num - a[j]+bigval)%200;
		v[i].push_back(j);
		if(num==0) break;
		
		for(k=j-1;k>0;k--)
			if(dp[num][k]>dp[num][k-1]) break;
		
		j=k;
		}
	}

for(i=0;i<2;i++){
cout<<v[i].size()<<" ";

sort(v[i].begin(),v[i].end());

for(j=0;j<v[i].size();j++)
	cout<<v[i][j]+1<<" ";
cout<<endl;
}


} 


return 0;}
#include <bits/stdc++.h>

#define rep(i, n) for(int i = 0; i < n; i++)
using namespace std;

typedef long long ll;

const int INF = 1 << 30;
const ll LLINF = 1LL << 60;

int mod = 1000000007;

bool issame(int x, int y){
    if(x > y) swap(x, y);
    bool ret = true;
    while(x){
        if((x&1)^(y&1)) ret = false;
        x >>= 1, y >>= 1;
    }
    return ret;
}

int main(void){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int N; cin >> N;
    vector<ll> A(N); rep(i, N) {cin >> A[i]; A[i] %= 200;}
    if(N >= 20){
        int states = (1 << 10);
        vector<int> resB(states), resC(states);
        rep(i, states){
            int val = i;
            ll acc = 0;
            rep(j, 10){
                if(val&1) (acc += A[j]) %= 200;
                val >>= 1;
            }
            resB[i] = acc;
        }
        rep(i, states){
            int val = i;
            ll acc = 0;
            rep(j, 10){
                if(val&1) (acc += A[j+10]) %= 200;
                val >>= 1;
            }
            resC[i] = acc;
        }

        rep(i, states){
            rep(j, states){
                if(i == 0 || j == 0) continue;
                if(resB[i] == resC[j]){
                    cout << "Yes" << endl;
                    int valB = i, valC = j;
                    cout << __builtin_popcount(valB) << " ";
                    rep(k, 10){
                        if(valB&1) cout << k+1 << " ";
                        valB >>= 1;
                    }
                    cout << endl;
                    cout << __builtin_popcount(valC) << " ";
                    rep(k, 10){
                        if(valC&1) cout << k+11 << " ";
                        valC >>= 1;
                    }
                    cout << endl;
                    return 0;
                }
            }
        }
    }
    else{
        int states = (1 << N);
        vector<int> res(states);
        rep(i, states){
            int val = i;
            int acc = 0;
            rep(j, N){
                if(val&1) (acc += A[j]) %= 200;
                val >>= 1;
            }
            res[i] = acc;
        }
        rep(i, states){
            rep(j, states){
                if(!issame(i, j) && res[i] == res[j]){
                    cout << "Yes" << endl;
                    int valB = i, valC = j;
                    cout << __builtin_popcount(valB) << " ";
                    rep(k, 10){
                        if(valB&1) cout << k+1 << " ";
                        valB >>= 1;
                    }
                    cout << endl;
                    cout << __builtin_popcount(valC) << " ";
                    rep(k, 10){
                        if(valC&1) cout << k+1 << " ";
                        valC >>= 1;
                    }
                    cout << endl;
                    return 0;
                }
            }
        }
        cout << "No" << endl;
    }
    return 0;
}