#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pint;
typedef vector<int> vi;
typedef vector<ll> vll;
#define all(v) v.begin(), v.end()
#define rep(i,s,n) for(int i=(int)(s);i<(int)(n);i++)
#define lep(i,s,n) for(ll i=(ll)(s);i<(ll)(n);i++)
#define vep(v) for(auto&& x : v)
#define sz(s) (int)(s.size())
#define debug(a) cout << "debug : " << a << endl
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 (b<a) { a=b; return 1; } return 0; }
using graph = vector<vector<int>>;

int main(){
  int n;
  cin >> n;
  vll a(n);
  vep(a){
    cin >> x;
    x%=200;
  }
  graph g(200);
  g[a[0]].push_back(1);
  rep(i, 1, n){
    vector<bool> no(200, true);
    rep(j, 0, 200){
      if(sz(g[j])&&no[j]){
        int p = (j+a[i])%200;
        if(sz(g[p])){
          cout << "Yes" << endl;
          cout << sz(g[p]);
          rep(k, 0, sz(g[p])){
            cout << " " << g[p][k];
          }
          cout << endl;
          cout << sz(g[j])+1;
          rep(k, 0, sz(g[j])){
            cout << " " << g[j][k];
          }
          cout << " " << i+1 << endl;
          return 0;
        }
        else{
          rep(k, 0, sz(g[j])){
            g[p].push_back(g[j][k]);
          }
          g[p].push_back(i+1);
          no[p]=false;
        }
      }
    }
    if(sz(g[a[i]])){
      cout << "Yes" << endl;
      cout << sz(g[a[i]]);
      rep(z, 0, sz(g[a[i]])){
        cout << " " << g[a[i]][z];
      }
      cout << endl;
      cout << "1 " << i+1 << endl;
      return 0;
    }
    g[a[i]].push_back(i+1);
  }
  cout << "No" << endl;
}
#include <bits/stdc++.h>
using namespace std;
//ans[]の添字を数列の和(mod 200)にして、bit全探索で和の添字の要素をインクリメントし、値が２になった時点で数列出力
int main()
{
    int n;
    cin >> n;
    
    long long A[210], B[210];
    for (int i = 0; i < n; i++)
    {
        cin >> A[i];
        A[i] %= 200;
    }
    n = min(n,8);
    int ans[200] = {};
    for (int bit = 1; bit < (1 << n); ++bit)
    {
        vector<int> S;
        for (int i = 0; i < n; ++i)
        {
            if (bit & (1 << i))
                S.push_back(i);
        }
        int count = 0;
        for (auto x : S)
        {
            count += A[x];
            count %= 200;
        }
        ans[count]++;
        if (ans[count] == 2)
        {//１個目の数列出力
            cout << "Yes" << endl;
            cout << S.size() << " ";
            for (auto x : S)
                cout << x + 1 << " ";
            cout << endl;
            goto end;
        }
    }
    cout << "No";
    return 0;
end:
    for (int bit = 1; bit < (1 << n); ++bit)
    {
        vector<int> S;
        for (int i = 0; i < n; ++i)
        {
            if (bit & (1 << i))
                S.push_back(i);
        }
        int count = 0;
        for (auto x : S)
        {
            count += A[x];
            count %= 200;
        }
        if (ans[count] == 2)
        {//２個目の数列出力
            cout << S.size() << " ";
            for (auto x : S)
                cout << x + 1 << " ";
            return 0;
        }
    }
    return 0;
}