#include <bits/stdc++.h>

using namespace std;

const int MOD = 1000000007;
const int MAX32 = 2147483647;
const long long MAX64 = 9223372036854775807;
const double PI = 3.14159265358979323846;

long long a[200], n, flag = -1, zeroflag;
string b[200], c;

void dfs(long long num, string s, long long sum) {
  if (num >= n) {
    if (b[sum] == "") {
      b[sum] = s;
    } else {
      flag = sum;
      c = s;
    }
  } else if (num == n - 1 && !zeroflag) {
    s += '1';
    dfs(num + 1, s, (sum + a[num]) % 200);
    zeroflag = 1;
  } else if (flag == -1) {
    s += '0';
    dfs(num + 1, s, sum);
    s[num] = '1';
    dfs(num + 1, s, (sum + a[num]) % 200);
  }
}

int main() {
  long long x = 0, y = 0;
  string s;
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> a[i];
    a[i] %= 200;
  }
  dfs(0, s, 0);
  if (flag == -1) {
    cout << "No" << endl;
  } else {
    cout << "Yes" << endl;
    for (int i = 0; i < n; i++) {
      x += (b[flag][i] == '1');
      y += (c[i] == '1');
    }
    cout << x;
    for (int i = 0; i < n; i++) {
      if (b[flag][i] == '1') {
        cout << " " << i + 1;
      }
    }
    cout << endl;
    cout << y;
    for (int i = 0; i < n; i++) {
      if (c[i] == '1') {
        cout << " " << i + 1;
      }
    }
    cout << endl;
  }
}
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<vector>
#include<cmath>
#include<algorithm>
#include<map>
#include<queue>
#include<deque>
#include<iomanip>
#include<tuple>
#include<cassert>
#include<set>
#include<complex>
#include<numeric>
#include<functional>
#include<unordered_map>
#include<unordered_set>
using namespace std;
typedef long long int LL;
typedef pair<int,int> P;
typedef pair<LL,int> LP;
const int INF=1<<30;
const LL MAX=1e9+7;

void array_show(int *array,int array_n,char middle=' '){
    for(int i=0;i<array_n;i++)printf("%d%c",array[i],(i!=array_n-1?middle:'\n'));
}
void array_show(LL *array,int array_n,char middle=' '){
    for(int i=0;i<array_n;i++)printf("%lld%c",array[i],(i!=array_n-1?middle:'\n'));
}
void array_show(vector<int> &vec_s,int vec_n=-1,char middle=' '){
    if(vec_n==-1)vec_n=vec_s.size();
    for(int i=0;i<vec_n;i++)printf("%d%c",vec_s[i],(i!=vec_n-1?middle:'\n'));
}
void array_show(vector<LL> &vec_s,int vec_n=-1,char middle=' '){
    if(vec_n==-1)vec_n=vec_s.size();
    for(int i=0;i<vec_n;i++)printf("%lld%c",vec_s[i],(i!=vec_n-1?middle:'\n'));
}

namespace sol{
    map<LL,int> m1;

    void solve(){
        LL n,m;
        int i,j,k;
        LL a,b,c;
        cin>>n>>m;
        m1[n-m/2]++,m1[n+1]--;
        if(m>=2){
            a=(m-2)/2;
            m1[n]++,m1[n+a+1]--;
        }
        if(m%2==0)a=-(n-m/2+1);
        else a=-(n-m/2);
        m1[-n]++,m1[a+1]--;
        m1[-n-(m-1)/2]++,m1[-n+1]--;
        a=0;
        LL s=0;
        for(auto node:m1){
            if(a==0)b=node.first;
            a+=node.second;
            if(a==0)s+=node.first-b;
        }
        cout<<s<<endl;
    }
}

int main(){
    sol::solve();
}