#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);
}