#include #include #include #include #include #include #include #include typedef long long llong; const int MAXN = 1000000; const int INF = 1e9 + 1; int n, d; int a[MAXN]; std::vector > v; void solve() { int curr = 1; std::sort(a + 1, a + 1 + n); if (a[n] >= d) { std::cout << 1 << '\n'; return; } for (int i = 2 ; i <= n ; ++i) { if (a[i] != a[i - 1]) { v.push_back({a[i - 1], curr}); curr = 1; } else curr++; } v.push_back({a[n], curr}); std::sort(v.begin(), v.end(), [&](auto x, auto y) { return x.first * x.second > y.first * y.second; }); int lPtr = 0, cnt = v[0].second; int sum = 0; int ans = 0; while (sum < d) { sum += v[lPtr].first * v[lPtr].second; ans += v[lPtr].second; lPtr++; } int ptr = 0; for (int i = lPtr ; i < v.size() ; ++i) { while (sum >= d) { if (cnt == 0) { ptr++; cnt = v[ptr].second; } sum -= v[ptr].first; cnt--; } sum += v[i].first * v[i].second; if (sum >= d) ans += v[i].second; } std::cout << ans << '\n'; } void read() { std::cin >> n >> d; for (int i = 1 ; i <= n ; ++i) { std::cin >> a[i]; } } void fastIO() { freopen("parties.in", "r", stdin); freopen("parties.out", "w", stdout); std::ios_base :: sync_with_stdio(0); std::cout.tie(nullptr); std::cin.tie(nullptr); } int main() { fastIO(); read(); solve(); return 0; }