#include <bits/stdc++.h>
using namespace std;
bool dp[505][505];
bool nu[505][505] = {0};
bool dp1[2][505][505] = {0};
long long a[505];
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ;
  int i, j;
  for (i = 0; i < 505; i++)
    for (j = 0; j < 505; j++) dp[i][j] = nu[i][j] = 0;
  long long n, k;
  cin >> n >> k;
  for (i = 1; i <= n; i++) cin >> a[i];
  dp[0][0] = 1;
  int su = 0;
  for (i = 1; i <= n; i++) {
    for (j = 0; j <= k; j++) {
      dp[i][j] |= dp[i - 1][j];
      if (j - a[i] >= 0) dp[i][j] |= dp[i - 1][j - a[i]];
    }
  }
  nu[n][k] = 1;
  for (i = n; i >= 1; i--) {
    for (j = k; j >= 0; j--) {
      if (dp[i][j]) {
        if (dp[i - 1][j]) {
          nu[i - 1][j] |= nu[i][j];
        }
        if (j - a[i] >= 0 && dp[i - 1][j - a[i]])
          nu[i - 1][j - a[i]] |= nu[i][j];
      }
    }
  }
  int b = 0;
  dp1[1][k][0] = 1;
  for (i = n; i >= 1; i--) {
    for (j = k; j >= 0; j--) {
      if (j - a[i] >= 0 && nu[i][j] == 1 && nu[i - 1][j - a[i]] == 1) {
        for (int l = k; l >= 0; l--) {
          dp1[b][j - a[i]][l] |= dp1[1 - b][j][l];
          if (l - a[i] >= 0) dp1[b][j - a[i]][l] |= dp1[1 - b][j][l - a[i]];
        }
      }
      if (nu[i][j] == 1 && nu[i - 1][j] == 1) {
        for (int l = k; l >= 0; l--) {
          dp1[b][j][l] |= dp1[1 - b][j][l];
        }
      }
    }
    if (i != 1) {
      b = 1 - b;
      for (int x = 0; x <= k; x++) {
        for (int y = 0; y <= k; y++) dp1[b][x][y] = 0;
      }
    }
  }
  int co = 0;
  for (i = 0; i <= k; i++)
    if (dp1[b][0][i]) co++;
  cout << co << endl;
  for (i = 0; i <= k; i++)
    if (dp1[b][0][i]) cout << i << " ";
  cout << endl;
  return 0;
}
