// ~~ icebear ~~
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
typedef pair<int, ii> iii;
template<class T>
bool minimize(T &a, const T &b) {
if (a > b) return a = b, true;
return false;
}
template<class T>
bool maximize(T &a, const T &b) {
if (a < b) return a = b, true;
return false;
}
#define FOR(i,a,b) for(int i=(a); i<=(b); ++i)
#define FORR(i,a,b) for(int i=(a); i>=(b); --i)
#define REP(i, n) for(int i=0; i<(n); ++i)
#define RED(i, n) for(int i=(n)-1; i>=0; --i)
#define MASK(i) (1LL << (i))
#define BIT(S, i) (((S) >> (i)) & 1)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define all(x) x.begin(), x.end()
#define task "exchange"
const int MOD = 1e9 + 7;
const int inf = 1e9 + 27092008;
const ll INF = 1e18 + 27092008;
const int N = 6e4 + 5;
const int M = 400;
int n, p, c[N], num;
int vals[2 * N], cnt[2 * N], dp[M][2 * N], trace[M][2 * N];
deque<int> dq[2 * N];
bool haveZero = false;
void init(void) {
cin >> n >> p;
FOR(i, 1, n) cin >> c[i];
sort(c + 1, c + n + 1);
FOR(i, 1, n) {
if (!c[i]) {
haveZero = true;
continue;
}
if (c[i] != vals[num]) vals[++num] = c[i];
cnt[num]++;
}
}
void process(void) {
memset(dp, 0x3f, sizeof dp);
dp[0][0] = 0;
if (2 * p < N) {
FOR(i, 1, num) {
FOR(j, 0, 2 * p) {
if (j >= cnt[i] * vals[i] && minimize(dp[i][j], dp[i-1][j - cnt[i] * vals[i]] + 1))
trace[i][j] = cnt[i];
int r = j % vals[i];
if (dp[i - 1][j] >= 0) {
while(!dq[r].empty() && dp[i-1][dq[r].back()] > dp[i][j]) dq[r].pop_back();
dq[r].pb(j);
}
while(!dq[r].empty() && (j - dq[r].front()) >= cnt[i] * vals[i]) dq[r].pop_front();
if (!dq[r].empty()) {
int best = dq[r].front();
if (minimize(dp[i][j], dp[i-1][best]))
trace[i][j] = (j - best) / vals[i];
}
}
REP(j, vals[i]) dq[j].clear();
}
} else {
FOR(i, 1, num) FOR(j, 0, 2 * p) FOR(k, 0, cnt[i]) {
if (k * vals[i] > j) break;
if (minimize(dp[i][j], dp[i - 1][j - k * vals[i]] + (k == cnt[i])))
trace[i][j] = k;
}
}
int res = inf, jres = 0;
FOR(j, p, 2 * p) if (minimize(res, dp[num][j]))
jres = j;
cout << num + haveZero - res << ' ' << jres << '\n';
vector<int> values;
while(jres > 0 && num > 0) {
int k = trace[num][jres];
FOR(i, 1, k) values.pb(vals[num]);
jres -= k * vals[num];
num--;
}
sort(all(values));
for(int v : values) cout << v << ' ';
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
if (fopen(task".inp", "r")) {
freopen(task".inp", "r", stdin);
freopen(task".out", "w", stdout);
}
int tc = 1;
// cin >> tc;
while(tc--) {
init();
process();
}
return 0;
}
Ly8gfn4gaWNlYmVhciB+fgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnR5cGVkZWYgbG9uZyBsb25nIGxsOwp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IGlpOwp0eXBlZGVmIHBhaXI8aW50LCBpaT4gaWlpOwoKdGVtcGxhdGU8Y2xhc3MgVD4KICAgIGJvb2wgbWluaW1pemUoVCAmYSwgY29uc3QgVCAmYikgewogICAgICAgIGlmIChhID4gYikgcmV0dXJuIGEgPSBiLCB0cnVlOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCnRlbXBsYXRlPGNsYXNzIFQ+CiAgICBib29sIG1heGltaXplKFQgJmEsIGNvbnN0IFQgJmIpIHsKICAgICAgICBpZiAoYSA8IGIpIHJldHVybiBhID0gYiwgdHJ1ZTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgojZGVmaW5lIEZPUihpLGEsYikgZm9yKGludCBpPShhKTsgaTw9KGIpOyArK2kpCiNkZWZpbmUgRk9SUihpLGEsYikgZm9yKGludCBpPShhKTsgaT49KGIpOyAtLWkpCiNkZWZpbmUgUkVQKGksIG4pIGZvcihpbnQgaT0wOyBpPChuKTsgKytpKQojZGVmaW5lIFJFRChpLCBuKSBmb3IoaW50IGk9KG4pLTE7IGk+PTA7IC0taSkKI2RlZmluZSBNQVNLKGkpICgxTEwgPDwgKGkpKQojZGVmaW5lIEJJVChTLCBpKSAoKChTKSA+PiAoaSkpICYgMSkKI2RlZmluZSBtcCBtYWtlX3BhaXIKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIGFsbCh4KSB4LmJlZ2luKCksIHguZW5kKCkKI2RlZmluZSB0YXNrICJleGNoYW5nZSIKCmNvbnN0IGludCBNT0QgPSAxZTkgKyA3Owpjb25zdCBpbnQgaW5mID0gMWU5ICsgMjcwOTIwMDg7CmNvbnN0IGxsIElORiA9IDFlMTggKyAyNzA5MjAwODsKY29uc3QgaW50IE4gPSA2ZTQgKyA1Owpjb25zdCBpbnQgTSA9IDQwMDsKaW50IG4sIHAsIGNbTl0sIG51bTsKaW50IHZhbHNbMiAqIE5dLCBjbnRbMiAqIE5dLCBkcFtNXVsyICogTl0sIHRyYWNlW01dWzIgKiBOXTsKZGVxdWU8aW50PiBkcVsyICogTl07CmJvb2wgaGF2ZVplcm8gPSBmYWxzZTsKCnZvaWQgaW5pdCh2b2lkKSB7CiAgICBjaW4gPj4gbiA+PiBwOwogICAgRk9SKGksIDEsIG4pIGNpbiA+PiBjW2ldOwogICAgc29ydChjICsgMSwgYyArIG4gKyAxKTsKICAgIEZPUihpLCAxLCBuKSB7CiAgICAgICAgaWYgKCFjW2ldKSB7CiAgICAgICAgICAgIGhhdmVaZXJvID0gdHJ1ZTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmIChjW2ldICE9IHZhbHNbbnVtXSkgdmFsc1srK251bV0gPSBjW2ldOwogICAgICAgIGNudFtudW1dKys7CiAgICB9Cn0KCnZvaWQgcHJvY2Vzcyh2b2lkKSB7CiAgICBtZW1zZXQoZHAsIDB4M2YsIHNpemVvZiBkcCk7CiAgICBkcFswXVswXSA9IDA7CiAgICBpZiAoMiAqIHAgPCBOKSB7CiAgICAgICAgRk9SKGksIDEsIG51bSkgewogICAgICAgICAgICBGT1IoaiwgMCwgMiAqIHApIHsKICAgICAgICAgICAgICAgIGlmIChqID49IGNudFtpXSAqIHZhbHNbaV0gJiYgbWluaW1pemUoZHBbaV1bal0sIGRwW2ktMV1baiAtIGNudFtpXSAqIHZhbHNbaV1dICsgMSkpCiAgICAgICAgICAgICAgICAgICAgdHJhY2VbaV1bal0gPSBjbnRbaV07CgogICAgICAgICAgICAgICAgaW50IHIgPSBqICUgdmFsc1tpXTsKICAgICAgICAgICAgICAgIGlmIChkcFtpIC0gMV1bal0gPj0gMCkgewogICAgICAgICAgICAgICAgICAgIHdoaWxlKCFkcVtyXS5lbXB0eSgpICYmIGRwW2ktMV1bZHFbcl0uYmFjaygpXSA+IGRwW2ldW2pdKSBkcVtyXS5wb3BfYmFjaygpOwogICAgICAgICAgICAgICAgICAgIGRxW3JdLnBiKGopOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHdoaWxlKCFkcVtyXS5lbXB0eSgpICYmIChqIC0gZHFbcl0uZnJvbnQoKSkgPj0gY250W2ldICogdmFsc1tpXSkgZHFbcl0ucG9wX2Zyb250KCk7CiAgICAgICAgICAgICAgICBpZiAoIWRxW3JdLmVtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICBpbnQgYmVzdCA9IGRxW3JdLmZyb250KCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKG1pbmltaXplKGRwW2ldW2pdLCBkcFtpLTFdW2Jlc3RdKSkKICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2VbaV1bal0gPSAoaiAtIGJlc3QpIC8gdmFsc1tpXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgUkVQKGosIHZhbHNbaV0pIGRxW2pdLmNsZWFyKCk7CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICBGT1IoaSwgMSwgbnVtKSBGT1IoaiwgMCwgMiAqIHApIEZPUihrLCAwLCBjbnRbaV0pIHsKICAgICAgICAgICAgaWYgKGsgKiB2YWxzW2ldID4gaikgYnJlYWs7CiAgICAgICAgICAgIGlmIChtaW5pbWl6ZShkcFtpXVtqXSwgZHBbaSAtIDFdW2ogLSBrICogdmFsc1tpXV0gKyAoayA9PSBjbnRbaV0pKSkKICAgICAgICAgICAgICAgIHRyYWNlW2ldW2pdID0gazsKICAgICAgICB9CiAgICB9CgogICAgaW50IHJlcyA9IGluZiwganJlcyA9IDA7CiAgICBGT1IoaiwgcCwgMiAqIHApIGlmIChtaW5pbWl6ZShyZXMsIGRwW251bV1bal0pKQogICAgICAgIGpyZXMgPSBqOwogICAgY291dCA8PCBudW0gKyBoYXZlWmVybyAtIHJlcyA8PCAnICcgPDwganJlcyA8PCAnXG4nOwogICAgdmVjdG9yPGludD4gdmFsdWVzOwogICAgd2hpbGUoanJlcyA+IDAgJiYgbnVtID4gMCkgewogICAgICAgIGludCBrID0gdHJhY2VbbnVtXVtqcmVzXTsKICAgICAgICBGT1IoaSwgMSwgaykgdmFsdWVzLnBiKHZhbHNbbnVtXSk7CiAgICAgICAganJlcyAtPSBrICogdmFsc1tudW1dOwogICAgICAgIG51bS0tOwogICAgfQoKICAgIHNvcnQoYWxsKHZhbHVlcykpOwogICAgZm9yKGludCB2IDogdmFsdWVzKSBjb3V0IDw8IHYgPDwgJyAnOwp9CgppbnQgbWFpbigpIHsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKICAgIGlmIChmb3Blbih0YXNrIi5pbnAiLCAiciIpKSB7CiAgICAgICAgZnJlb3Blbih0YXNrIi5pbnAiLCAiciIsIHN0ZGluKTsKICAgICAgICBmcmVvcGVuKHRhc2siLm91dCIsICJ3Iiwgc3Rkb3V0KTsKICAgIH0KICAgIGludCB0YyA9IDE7Ci8vICAgIGNpbiA+PiB0YzsKICAgIHdoaWxlKHRjLS0pIHsKICAgICAgICBpbml0KCk7CiAgICAgICAgcHJvY2VzcygpOwogICAgfQogICAgcmV0dXJuIDA7Cn0K