#include <bits/stdc++.h> #define sc(x) scanf("%lld", &(x)) #define pr(x) printf("%lld\n", (x)) #define rep(i, l, r) for (int i = (l); i <= (r); ++i) using namespace std; typedef long long ll; const int N = 105; const int mod = 1e9 + 7; int a[N], car[N]; int ans = 0x3f3f3f3f; int n, w; void dfs(int idx, int p) { if (p >= ans) return; if (idx == n + 1) { ans = min(p, ans); return; } rep(i, 1, p) if (car[i] + a[idx] <= w) { // 可以上车 car[i] += a[idx]; dfs(idx + 1, p); car[i] -= a[idx]; // 回溯 } if (idx != 1) { // 单独放 car[++p] = a[idx]; dfs(idx + 1, p); } } int main() { scanf("%d%d", &n, &w); rep(i, 1, n) scanf("%d", a + i); dfs(1, 1); printf("%d", ans); return 0; }