#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int MOD = 1000000007;
const int MX = 1000001;
ll modExp(ll base, ll power) {
if (power == 0) return 1;
ll cur = modExp(base, power / 2);
cur = (cur * cur) % MOD;
if (power % 2) cur = (cur * base) % MOD;
return cur;
}
ll inv(ll x) { return modExp(x, MOD - 2); }
ll mul(ll A, ll B) { return (A * B) % MOD; }
ll add(ll A, ll B) { return (A + B) % MOD; }
ll sub(ll A, ll B) { return (A - B + MOD) % MOD; }
bool dp[501][501][501];
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, k;
cin >> n >> k;
vector<int> arr(n);
dp[0][0][0] = true;
// dp[i][j][k] = true if there exists some subset sum of j that also includes w
for (int i = 0; i < n; i++) cin >> arr[i];
for (int i = 0; i < n; i++) {
for (int a = 0 ; a <= k ; a ++) {
for (int b = 0 ; b <= k ; b ++) {
if (dp[i][a][b]) {
int val = arr[i];
dp[i + 1][a][b] = true;
if (a + val <= k) {
dp[i][a + val][b] = true;
if (b + val <= k) {
dp[i][a + val][b + val] = true;
}
}
}
}
}
}
vector<int> res;
for (int i = 0 ; i <= k ; i ++) {
if (dp[n][k][i]) {
res.push_back(i);
}
}
cout << res.size() << endl;
for (int i = 0 ; i < res.size() ; i ++) {
cout << res[i] << ' ';
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnVzaW5nIGxsID0gbG9uZyBsb25nOwpjb25zdCBpbnQgTU9EID0gMTAwMDAwMDAwNzsKY29uc3QgaW50IE1YID0gMTAwMDAwMTsKCmxsIG1vZEV4cChsbCBiYXNlLCBsbCBwb3dlcikgewogICAgaWYgKHBvd2VyID09IDApIHJldHVybiAxOwogICAgbGwgY3VyID0gbW9kRXhwKGJhc2UsIHBvd2VyIC8gMik7CiAgICBjdXIgPSAoY3VyICogY3VyKSAlIE1PRDsKICAgIGlmIChwb3dlciAlIDIpIGN1ciA9IChjdXIgKiBiYXNlKSAlIE1PRDsKICAgIHJldHVybiBjdXI7Cn0KbGwgaW52KGxsIHgpIHsgcmV0dXJuIG1vZEV4cCh4LCBNT0QgLSAyKTsgfQpsbCBtdWwobGwgQSwgbGwgQikgeyByZXR1cm4gKEEgKiBCKSAlIE1PRDsgfQpsbCBhZGQobGwgQSwgbGwgQikgeyByZXR1cm4gKEEgKyBCKSAlIE1PRDsgfQpsbCBzdWIobGwgQSwgbGwgQikgeyByZXR1cm4gKEEgLSBCICsgTU9EKSAlIE1PRDsgfQoKYm9vbCBkcFs1MDFdWzUwMV1bNTAxXTsKCgoKCmludCBtYWluKCkgewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShudWxscHRyKTsKICAgIGludCBuLCBrOwogICAgY2luID4+IG4gPj4gazsKICAgIHZlY3RvcjxpbnQ+IGFycihuKTsKICAgIGRwWzBdWzBdWzBdID0gdHJ1ZTsKICAgIC8vIGRwW2ldW2pdW2tdICA9IHRydWUgaWYgdGhlcmUgZXhpc3RzIHNvbWUgc3Vic2V0IHN1bSBvZiBqIHRoYXQgYWxzbyBpbmNsdWRlcyB3ICAgIAogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIGNpbiA+PiBhcnJbaV07CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewogICAgCiAgICAgICAgZm9yIChpbnQgYSAgPSAwIDsgYSA8PSAgayA7IGEgICsrKSB7CiAgICAgICAgICAgIGZvciAoaW50IGIgID0gMCA7IGIgPD0gIGsgOyBiICArKykgewogICAgICAgICAgICAgICAgIGlmIChkcFtpXVthXVtiXSkgewogICAgICAgICAgICAgICAgICAgIGludCB2YWwgPSBhcnJbaV07IAogICAgICAgICAgICAgICAgICAgIGRwW2kgKyAxXVthXVtiXSA9IHRydWU7IAogICAgICAgICAgICAgICAgICAgIGlmIChhICsgdmFsIDw9IGspIHsKICAgICAgICAgICAgICAgICAgICAgICAgZHBbaV1bYSArIHZhbF1bYl0gPSB0cnVlOyAKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGIgKyB2YWwgPD0gaykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZHBbaV1bYSArIHZhbF1bYiArIHZhbF0gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICB9Cn0KICAgIHZlY3RvcjxpbnQ+IHJlczsKICAgIGZvciAoaW50IGkgPSAwICA7IGkgPD0gayA7IGkgKyspIHsKICAgICAgICBpZiAoZHBbbl1ba11baV0pIHsKICAgICAgICAgICAgcmVzLnB1c2hfYmFjayhpKTsKICAgICAgICB9IAogICAgfSAgICAKICAgIGNvdXQgPDwgcmVzLnNpemUoKSA8PCBlbmRsOwogICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgcmVzLnNpemUoKSA7IGkgKyspIHsKICAgICAgICBjb3V0IDw8IHJlc1tpXSA8PCAnICc7IAogICAgfQogICAgIHJldHVybiAwOwp9Cg==