/*
Cred : SunnyYeahBoi
It's my last chance (⌐■_■)
Problem :
*/
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define double long double
#define endl "\n"
#define NAME "a"
const int MAXN = 1e6 + 5;
const int inf = 1e18;
const int MOD = 1e9 + 7;
void FileInput(){
if(fopen(NAME".inp" , "r") == NULL)
freopen(NAME".inp" , "w" , stdout);
freopen(NAME".inp" , "r" , stdin);
freopen(NAME".out" , "w" , stdout);
}
/*
Chọn ra k số
trừ đi từng số vào x
ai
x -= ai
tìm k nhỏ nhất sao cho x âm
Tham lam
Yêu cầu: chọn ra k số sao cho tổng > x
độ lớn => cứ chọn số lớn nhất
đáp án: lấy tổng các số lớn nhất cho tới tổng > x
sort lại theo thứ tự tăng dần
a1 <= a2 <= a3 <= .... <= an
tong = 0
k = 0
while(tong <= x)
tong += a[n]
n--
k++
sort theo thứ tự giảm dần => số lớn nhất ở vị trí 1
lấy k số đầu tiên
a1 >= a2 >= a3 ... >= an
*/
int n , x;
int a[MAXN];
void solve(){
cin >> n >> x;
for(int i = 1 ; i <= n ; i++)
cin >> a[i];
sort(a + 1 , a + 1 + n , greater<int>()); // thay đổi phép so sánh
int tong = 0;
bool flag = false; // biến cờ hiệu - có tìm ra kết quả không?
for(int i = 1 ; i <= n ; i++){
tong += a[i];
if(tong > x){
cout << i << endl;
flag = true;
break;
}
}
if(flag == false) cout << -1 << endl;
}
int32_t main(){
//FileInput();
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int t = 1;
// cin >> t;
while(t--)
solve();
return 0;
}
LyoKICAgIENyZWQgOiBTdW5ueVllYWhCb2kKICAgIEl0J3MgbXkgbGFzdCBjaGFuY2UgKOKMkOKWoF/ilqApCiAgICBQcm9ibGVtIDoKKi8KCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBpbnQgbG9uZyBsb25nCiNkZWZpbmUgZG91YmxlIGxvbmcgZG91YmxlCiNkZWZpbmUgZW5kbCAiXG4iCiNkZWZpbmUgTkFNRSAiYSIKCmNvbnN0IGludCBNQVhOID0gMWU2ICsgNTsKY29uc3QgaW50IGluZiA9IDFlMTg7CmNvbnN0IGludCBNT0QgPSAxZTkgKyA3OwoKdm9pZCBGaWxlSW5wdXQoKXsKICAgIGlmKGZvcGVuKE5BTUUiLmlucCIgLCAiciIpID09IE5VTEwpCiAgICAgICAgZnJlb3BlbihOQU1FIi5pbnAiICwgInciICwgc3Rkb3V0KTsKICAgIGZyZW9wZW4oTkFNRSIuaW5wIiAsICJyIiAsIHN0ZGluKTsKICAgIGZyZW9wZW4oTkFNRSIub3V0IiAsICJ3IiAsIHN0ZG91dCk7Cn0KCi8qCiAgICBDaOG7jW4gcmEgayBz4buRIAogICAgdHLhu6sgxJFpIHThu6tuZyBz4buRIHbDoG8geAogICAgYWkKICAgIHggLT0gYWkKICAgIHTDrG0gayBuaOG7jyBuaOG6pXQgc2FvIGNobyB4IMOibSAKCiAgICBUaGFtIGxhbSAKICAgIFnDqnUgY+G6p3U6IGNo4buNbiByYSBrIHPhu5Egc2FvIGNobyB04buVbmcgPiB4CgogICAgxJHhu5kgbOG7m24gPT4gY+G7qSBjaOG7jW4gc+G7kSBs4bubbiBuaOG6pXQKCiAgICDEkcOhcCDDoW46IGzhuqV5IHThu5VuZyBjw6FjIHPhu5EgbOG7m24gbmjhuqV0IGNobyB04bubaSB04buVbmcgPiB4CgogICAgc29ydCBs4bqhaSB0aGVvIHRo4bupIHThu7EgdMSDbmcgZOG6p24gCiAgICBhMSA8PSBhMiA8PSBhMyA8PSAuLi4uIDw9IGFuCiAgICB0b25nID0gMAogICAgayA9IDAKICAgIHdoaWxlKHRvbmcgPD0geCkKICAgICAgICB0b25nICs9IGFbbl0KICAgICAgICBuLS0KICAgICAgICBrKysKCiAgICBzb3J0IHRoZW8gdGjhu6kgdOG7sSBnaeG6o20gZOG6p24gPT4gc+G7kSBs4bubbiBuaOG6pXQg4bufIHbhu4sgdHLDrSAxICAKICAgIGzhuqV5IGsgc+G7kSDEkeG6p3UgdGnDqm4KICAgIGExID49IGEyID49IGEzIC4uLiA+PSBhbiAKKi8KCmludCBuICwgeDsKaW50IGFbTUFYTl07Cgp2b2lkIHNvbHZlKCl7CiAgICBjaW4gPj4gbiA+PiB4OwogICAgZm9yKGludCBpID0gMSA7IGkgPD0gbiA7IGkrKykKICAgICAgICBjaW4gPj4gYVtpXTsKCiAgICBzb3J0KGEgKyAxICwgYSArIDEgKyBuICwgZ3JlYXRlcjxpbnQ+KCkpOyAvLyB0aGF5IMSR4buVaSBwaMOpcCBzbyBzw6FuaCAKCiAgICBpbnQgdG9uZyA9IDA7IAogICAgYm9vbCBmbGFnID0gZmFsc2U7IC8vIGJp4bq/biBj4budIGhp4buHdSAtIGPDsyB0w6xtIHJhIGvhur90IHF14bqjIGtow7RuZz8KICAgIGZvcihpbnQgaSA9IDEgOyBpIDw9IG4gOyBpKyspewogICAgICAgIHRvbmcgKz0gYVtpXTsKICAgICAgICBpZih0b25nID4geCl7CiAgICAgICAgICAgIGNvdXQgPDwgaSA8PCBlbmRsOwogICAgICAgICAgICBmbGFnID0gdHJ1ZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQoKICAgIGlmKGZsYWcgPT0gZmFsc2UpIGNvdXQgPDwgLTEgPDwgZW5kbDsKfQoKaW50MzJfdCBtYWluKCl7CiAgICAvL0ZpbGVJbnB1dCgpOwogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTtjaW4udGllKDApO2NvdXQudGllKDApOwogICAgaW50IHQgPSAxOwogICAgLy8gY2luID4+IHQ7CiAgICB3aGlsZSh0LS0pCiAgICAgICAgc29sdmUoKTsKICAgIHJldHVybiAwOwp9Cg==