#include <bits/stdc++.h>
using namespace std;
#define faster ios_base::sync_with_stdio(false); cin.tie(NULL)
#define Bit(mask , i) ((mask >> i) & 1)
#define fi first
#define se second
#define _LOG2(nl) 31 - __builtin_clz(nl)
#define c_bit(nl) __builtin_popcount(nl)
#define ii pair<long long , int>
#define lll pair<long long , pair<long long , long long>>
#define lii pair<long long , pair<long long , int>>
#define iii pair<int , pair<int , int>>
#define iiii pair<pair<int , int> , pair<int , int>>
#define llll pair<pair<__int128 , __int128> , pair<__int128 , __int128>>
#define li pair<long long , int>
#define db long double
#define onBit(mask , i) (mask | (1 << i))
#define offBit(mask , i) (mask & (~(1 << i)))
const int N = 20;
int n , t , a[N];
long long f[N][N][N][N][N] , F[N][N][2][N][N][N];
vector<int> Ans;
void inp(){
cin >> n >> t;
for (int i = 1 ; i <= n ; ++i){
cin >> a[i];
}
}
long long dp(int pos , int val , int min1 , int min2 , int _max){
if (pos > n){
// cout << pos << " " << val << " " << min1 << " " << min2 << " " << _max << " " << 1 << '\n';
return f[pos][val][min1][min2][_max] = 1;
}
if (f[pos][val][min1][min2][_max] != -1) return f[pos][val][min1][min2][_max];
long long ans = 0;
bool bl = 0;
for (int j = 1 ; j <= n ; ++j){
int n_min1 = min1 , n_min2 = min2 , n_max = _max;
n_min2 = min(n_min2 , j);
if (n_min2 < n_min1) swap(n_min1 , n_min2);
n_max = max(n_max , j);
if (n_min1 + n_min2 <= n_max) continue;
long long tmp = dp(pos + 1 , j , n_min1 , n_min2 , n_max);
ans += tmp;
}
// cout << pos << " " << val << " " << min1 << " " << min2 << " " << _max << " " << ans << '\n';
return f[pos][val][min1][min2][_max] = ans;
}
void DP(int pos , int val , int min1 , int min2 , int _max){
if (pos > n){
return;
}
for (int j = 1 ; j <= n ; ++j){
int n_min1 = min1 , n_min2 = min2 , n_max = _max;
n_min2 = min(n_min2 , j);
if (n_min2 < n_min1) swap(n_min1 , n_min2);
n_max = max(n_max , j);
if (n_min1 + n_min2 <= n_max) continue;
if (t > f[pos + 1][j][n_min1][n_min2][n_max]){
t -= f[pos + 1][j][n_min1][n_min2][n_max];
}
else{
Ans.push_back(j);
DP(pos + 1 , j , n_min1 , n_min2 , n_max);
break;
}
}
}
long long Dp(int pos , int val , int low , int min1 , int min2 , int _max){
if (pos > n){
return 1;
}
if (F[pos][val][low][min1][min2][_max] != -1) return F[pos][val][low][min1][min2][_max];
long long ans = 0;
for (int j = 1 ; j <= n ; ++j){
if (low && j > a[pos]) break;
int n_min1 = min1 , n_min2 = min2 , n_max = _max;
n_min2 = min(n_min2 , j);
if (n_min2 < n_min1) swap(n_min1 , n_min2);
n_max = max(n_max , j);
if (n_min1 + n_min2 <= n_max) continue;
int n_low = 0;
if (low && j == a[pos]) n_low = 1;
ans += Dp(pos + 1 , j , n_low , n_min1 , n_min2 , n_max);
}
return F[pos][val][low][min1][min2][_max] = ans;
}
void solve(){
memset(f , -1 , sizeof f);
cout << dp(1 , 0 , n + 1 , n + 1 , 0) << '\n';
DP(1 , 0 , n + 1 , n + 1 , 0);
for (auto &c : Ans) cout << c << " ";
cout << '\n';
memset(F , -1 , sizeof F);
cout << Dp(1 , 0 , 1 , n + 1 , n + 1 , 0);
}
int main(){
faster;
inp();
solve();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgZmFzdGVyIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOyBjaW4udGllKE5VTEwpCiNkZWZpbmUgQml0KG1hc2sgLCBpKSAoKG1hc2sgPj4gaSkgJiAxKQojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgX0xPRzIobmwpIDMxIC0gX19idWlsdGluX2NseihubCkKI2RlZmluZSBjX2JpdChubCkgX19idWlsdGluX3BvcGNvdW50KG5sKQojZGVmaW5lIGlpIHBhaXI8bG9uZyBsb25nICwgaW50PgojZGVmaW5lIGxsbCBwYWlyPGxvbmcgbG9uZyAsIHBhaXI8bG9uZyBsb25nICwgbG9uZyBsb25nPj4KI2RlZmluZSBsaWkgcGFpcjxsb25nIGxvbmcgLCBwYWlyPGxvbmcgbG9uZyAsIGludD4+CiNkZWZpbmUgaWlpIHBhaXI8aW50ICwgcGFpcjxpbnQgLCBpbnQ+PgojZGVmaW5lIGlpaWkgcGFpcjxwYWlyPGludCAsIGludD4gLCBwYWlyPGludCAsIGludD4+CiNkZWZpbmUgbGxsbCBwYWlyPHBhaXI8X19pbnQxMjggLCBfX2ludDEyOD4gLCBwYWlyPF9faW50MTI4ICwgX19pbnQxMjg+PgojZGVmaW5lIGxpIHBhaXI8bG9uZyBsb25nICwgaW50PgojZGVmaW5lIGRiIGxvbmcgZG91YmxlCiNkZWZpbmUgb25CaXQobWFzayAsIGkpIChtYXNrIHwgKDEgPDwgaSkpCiNkZWZpbmUgb2ZmQml0KG1hc2sgLCBpKSAobWFzayAmICh+KDEgPDwgaSkpKQoKY29uc3QgaW50IE4gPSAyMDsKaW50IG4gLCB0ICwgYVtOXTsKbG9uZyBsb25nIGZbTl1bTl1bTl1bTl1bTl0gLCBGW05dW05dWzJdW05dW05dW05dOwp2ZWN0b3I8aW50PiBBbnM7Cgp2b2lkIGlucCgpewogICAgY2luID4+IG4gPj4gdDsKICAgIGZvciAoaW50IGkgPSAxIDsgaSA8PSBuIDsgKytpKXsKICAgICAgICBjaW4gPj4gYVtpXTsKICAgIH0KfQoKbG9uZyBsb25nIGRwKGludCBwb3MgLCBpbnQgdmFsICwgaW50IG1pbjEgLCBpbnQgbWluMiAsIGludCBfbWF4KXsKICAgIGlmIChwb3MgPiBuKXsKLy8gICAgICAgIGNvdXQgPDwgcG9zIDw8ICIgIiA8PCB2YWwgPDwgIiAiIDw8IG1pbjEgPDwgIiAiIDw8IG1pbjIgPDwgIiAiIDw8IF9tYXggPDwgIiAiIDw8IDEgPDwgJ1xuJzsKICAgICAgICByZXR1cm4gZltwb3NdW3ZhbF1bbWluMV1bbWluMl1bX21heF0gPSAxOwogICAgfQoKICAgIGlmIChmW3Bvc11bdmFsXVttaW4xXVttaW4yXVtfbWF4XSAhPSAtMSkgcmV0dXJuIGZbcG9zXVt2YWxdW21pbjFdW21pbjJdW19tYXhdOwoKICAgIGxvbmcgbG9uZyBhbnMgPSAwOwogICAgYm9vbCBibCA9IDA7CiAgICBmb3IgKGludCBqID0gMSA7IGogPD0gbiA7ICsrail7CiAgICAgICAgaW50IG5fbWluMSA9IG1pbjEgLCBuX21pbjIgPSBtaW4yICwgbl9tYXggPSBfbWF4OwogICAgICAgIG5fbWluMiA9IG1pbihuX21pbjIgLCBqKTsKICAgICAgICBpZiAobl9taW4yIDwgbl9taW4xKSBzd2FwKG5fbWluMSAsIG5fbWluMik7CiAgICAgICAgbl9tYXggPSBtYXgobl9tYXggLCBqKTsKCiAgICAgICAgaWYgKG5fbWluMSArIG5fbWluMiA8PSBuX21heCkgY29udGludWU7CgogICAgICAgIGxvbmcgbG9uZyB0bXAgPSBkcChwb3MgKyAxICwgaiAsIG5fbWluMSAsIG5fbWluMiAsIG5fbWF4KTsKCiAgICAgICAgYW5zICs9IHRtcDsKICAgIH0KCi8vICAgIGNvdXQgPDwgcG9zIDw8ICIgIiA8PCB2YWwgPDwgIiAiIDw8IG1pbjEgPDwgIiAiIDw8IG1pbjIgPDwgIiAiIDw8IF9tYXggPDwgIiAiIDw8IGFucyA8PCAnXG4nOwogICAgcmV0dXJuIGZbcG9zXVt2YWxdW21pbjFdW21pbjJdW19tYXhdID0gYW5zOwp9Cgp2b2lkIERQKGludCBwb3MgLCBpbnQgdmFsICwgaW50IG1pbjEgLCBpbnQgbWluMiAsIGludCBfbWF4KXsKICAgIGlmIChwb3MgPiBuKXsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgZm9yIChpbnQgaiA9IDEgOyBqIDw9IG4gOyArK2opewogICAgICAgIGludCBuX21pbjEgPSBtaW4xICwgbl9taW4yID0gbWluMiAsIG5fbWF4ID0gX21heDsKICAgICAgICBuX21pbjIgPSBtaW4obl9taW4yICwgaik7CiAgICAgICAgaWYgKG5fbWluMiA8IG5fbWluMSkgc3dhcChuX21pbjEgLCBuX21pbjIpOwogICAgICAgIG5fbWF4ID0gbWF4KG5fbWF4ICwgaik7CgogICAgICAgIGlmIChuX21pbjEgKyBuX21pbjIgPD0gbl9tYXgpIGNvbnRpbnVlOwoKICAgICAgICBpZiAodCA+IGZbcG9zICsgMV1bal1bbl9taW4xXVtuX21pbjJdW25fbWF4XSl7CiAgICAgICAgICAgIHQgLT0gZltwb3MgKyAxXVtqXVtuX21pbjFdW25fbWluMl1bbl9tYXhdOwogICAgICAgIH0KICAgICAgICBlbHNlewogICAgICAgICAgICBBbnMucHVzaF9iYWNrKGopOwogICAgICAgICAgICBEUChwb3MgKyAxICwgaiAsIG5fbWluMSAsIG5fbWluMiAsIG5fbWF4KTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQp9Cgpsb25nIGxvbmcgRHAoaW50IHBvcyAsIGludCB2YWwgLCBpbnQgbG93ICwgIGludCBtaW4xICwgaW50IG1pbjIgLCBpbnQgX21heCl7CiAgICBpZiAocG9zID4gbil7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgaWYgKEZbcG9zXVt2YWxdW2xvd11bbWluMV1bbWluMl1bX21heF0gIT0gLTEpIHJldHVybiBGW3Bvc11bdmFsXVtsb3ddW21pbjFdW21pbjJdW19tYXhdOwoKICAgIGxvbmcgbG9uZyBhbnMgPSAwOwogICAgZm9yIChpbnQgaiA9IDEgOyBqIDw9IG4gOyArK2opewogICAgICAgIGlmIChsb3cgJiYgaiA+IGFbcG9zXSkgYnJlYWs7CiAgICAgICAgaW50IG5fbWluMSA9IG1pbjEgLCBuX21pbjIgPSBtaW4yICwgbl9tYXggPSBfbWF4OwogICAgICAgIG5fbWluMiA9IG1pbihuX21pbjIgLCBqKTsKICAgICAgICBpZiAobl9taW4yIDwgbl9taW4xKSBzd2FwKG5fbWluMSAsIG5fbWluMik7CiAgICAgICAgbl9tYXggPSBtYXgobl9tYXggLCBqKTsKCiAgICAgICAgaWYgKG5fbWluMSArIG5fbWluMiA8PSBuX21heCkgY29udGludWU7CgogICAgICAgIGludCBuX2xvdyA9IDA7CiAgICAgICAgaWYgKGxvdyAmJiBqID09IGFbcG9zXSkgbl9sb3cgPSAxOwoKICAgICAgICBhbnMgKz0gRHAocG9zICsgMSAsIGogLCBuX2xvdyAsIG5fbWluMSAsIG5fbWluMiAsIG5fbWF4KTsKICAgIH0KCiAgICByZXR1cm4gRltwb3NdW3ZhbF1bbG93XVttaW4xXVttaW4yXVtfbWF4XSA9IGFuczsKfQoKdm9pZCBzb2x2ZSgpewogICAgbWVtc2V0KGYgLCAtMSAsIHNpemVvZiBmKTsKICAgIGNvdXQgPDwgZHAoMSAsIDAgLCBuICsgMSAsIG4gKyAxICwgMCkgPDwgJ1xuJzsKICAgIERQKDEgLCAwICwgbiArIDEgLCBuICsgMSAsIDApOwogICAgZm9yIChhdXRvICZjIDogQW5zKSBjb3V0IDw8IGMgPDwgIiAiOwogICAgY291dCA8PCAnXG4nOwogICAgbWVtc2V0KEYgLCAtMSAsIHNpemVvZiBGKTsKICAgIGNvdXQgPDwgRHAoMSAsIDAgLCAxICwgbiArIDEgLCBuICsgMSAsIDApOwp9CgppbnQgbWFpbigpewogICAgZmFzdGVyOwogICAgaW5wKCk7CiAgICBzb2x2ZSgpOwogICAgcmV0dXJuIDA7Cn0K