#include <bits/stdc++.h>

#define rep(i,n) for(int i=0;i<(int)(n);i++)
#define FOR(i,n,m) for(int i=(int)(n); i<=(int)(m); i++)
#define RFOR(i,n,m) for(int i=(int)(n); i>=(int)(m); i--)
#define ITR(x,c) for(__typeof(c.begin()) x=c.begin();x!=c.end();x++)
#define RITR(x,c) for(__typeof(c.rbegin()) x=c.rbegin();x!=c.rend();x++)
#define setp(n) fixed << setprecision(n)

template<class T> bool chmax(T &a, const T &b) { if (a<b) { a=b; return 1; } return 0; }
template<class T> bool chmin(T &a, const T &b) { if (a>b) { a=b; return 1; } return 0; }

#define ll long long
#define vll vector<ll>
#define vi vector<int>
#define pll pair<ll,ll>
#define pi pair<int,int>

#define all(a) (a.begin()),(a.end())
#define rall(a) (a.rbegin()),(a.rend())
#define fi first
#define se second
#define pb push_back
#define ins insert

#define debug(a) cerr<<(a)<<endl
#define dbrep(a,n) rep(_i,n) cerr<<(a[_i])<<" "; cerr<<endl
#define dbrep2(a,n,m) rep(_i,n){rep(_j,m) cerr<<(a[_i][_j])<<" "; cerr<<endl;}

using namespace std;

template<class A, class B>
ostream &operator<<(ostream &os, const pair<A,B> &p){return os<<"("<<p.fi<<","<<p.se<<")";}
template<class A, class B>
istream &operator>>(istream &is, pair<A,B> &p){return is>>p.fi>>p.se;}

template<class T>
vector<T> make_vec(size_t a){
	return vector<T>(a);
}
template<class T, class... Ts>
auto make_vec(size_t a, Ts... ts){
	return vector<decltype(make_vec<T>(ts...))>(a, make_vec<T>(ts...));
}

/* Some Libraries */

//-------------------------------------------------

bool dp[201][201][201][2];
using P = tuple<int,int,int,int>;
P prv[201][201][201][2];

int main(void)
{
    cin.tie(0);
    ios::sync_with_stdio(false);
    int N; cin>>N;
    vll a(N);
    rep(i,N) cin>>a[i], a[i]%=200;

    dp[0][0][0][0] = true;
    rep(i,N)rep(j,200)rep(k,200)rep(l,2){
        if (!dp[i][j][k][l]) continue;
        {
            int nj = (j+a[i])%200;
            dp[i+1][nj][k][1] = true;
            prv[i+1][nj][k][1] = P(i,j,k,l);
        }
        {
            int nk = (k+a[i])%200;
            dp[i+1][j][nk][1] = true;
            prv[i+1][j][nk][1] = P(i,j,k,l);
        }
        {
            int nj = (j+a[i])%200;
            int nk = (k+a[i])%200;
            dp[i+1][nj][nk][l] = true;
            prv[i+1][nj][nk][l] = P(i,j,k,l);
        }
    }
    int s=-1,t=-1;
    rep(i,200){
        if (dp[N][i][i][1]){
            s=i, t=i;
            break;
        }
    }
    if (s==-1){
        cout<<"No\n";
        return 0;
    }
    vi B,C;
    P cur(N,s,t,1);
    // fprintf(stderr, "%d %d %d %d\n", N,s,t,1);
    while(true){
        int i,j,k,l; 
        tie(i,j,k,l) = cur;
        if (i==0) break;
        P p = prv[i][j][k][l];
        int ni,nj,nk,nl;
        tie(ni,nj,nk,nl) = p;

        if (nl==0 && l==1){
            if ((nj+a[ni])%200==j){
                B.pb(i);
            }else{
                C.pb(i);
            }
        }else{
            if ((nj+a[ni])%200==j) B.pb(i);
            if ((nk+a[ni])%200==k) C.pb(i);
        }
        // fprintf(stderr, "%d %d %d %d\n", ni,nj,nk,nl);

        cur = p;
    }
    reverse(all(B));
    reverse(all(C));
    cout<<"Yes\n";
    cout<<B.size();
    rep(i,B.size()) cout<<" "<<B[i]; cout<<"\n";
    cout<<C.size();
    rep(i,C.size()) cout<<" "<<C[i]; cout<<"\n";
    return 0;
}

#include<bits/stdc++.h>
using namespace std;
#define FastIO ios_base::sync_with_stdio(false); cin.tie(0);
#define ll long long
#define ull unsigned long long
#define pb push_back
#define All(x) (x).begin(),(x).end()
#define mp make_pair
#define nl "\n"
typedef pair<int,int>ii;
typedef vector<int>vi;
typedef vector<ii>vii;
typedef vector<vi>vvi;
typedef vector<long long>vl;
typedef vector <vl>vvl;
template<class T>
void print(T& a)
{
    for(auto x:a)
        cout<<x<<" ";
    cout<<"\n";
}
int main()
{

    FastIO

    int n;
    cin>>n;

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

    vvi v(205);
    int len=pow(2,min(n,8));

    for(int i=1; i<len; i++)
    {
        ll sum=0;
        vi vv;
        for(int j=0; j<min(n,8); j++)
        {
            if((1<<j)&i)
            {
                vv.pb(j+1);
                sum+=a[j];
                sum%=200;
            }
        }

        if(!v[sum].empty())
        {
            cout<<"Yes\n";
            cout<<v[sum].size()<<" ";
            print(v[sum]);
            cout<<vv.size()<<" ";
            print(vv);
            return 0;
        }
        else v[sum]=vv;
    }
    cout<<"No\n";

    return 0;
}