#define forn(i, n) for (int i = 0; i < (int)(n); i++)
const int maxW = 1e5;
int main() {
int n, W;
cin >> n >> W;
int w[n];
forn(i, n)
cin >> w[i];
// maxW+1 <= 64
bitset<maxW+1> is; // {0, 0, 0, 0, ....}
// maxW / 32 or 64 <--- w >= logn
is[0] = 1;
forn(i, n) {
// рассмотрим ~is & (is << w[i])
is |= is << w[i]; // Time = maxW / 32
}
// старшие биты ... младшие биты ! но у нас не так =(
// is = {начало здесь, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1}
// w[i] = 2;
// is << 2 = {начало здесь, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0} // 0, 1 обрубились
// A | B = {начало здесь, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1}
int max_w = W;
while (!is[max_w])
max_w--;
printf("max = %d\n", max_w);
}