fn read<T: std::str::FromStr>() -> T {
    let mut s = String::new();
    std::io::stdin().read_line(&mut s).ok();
    s.trim().parse().ok().unwrap()
}

fn read_vec<T: std::str::FromStr>() -> Vec<T> {
    read::<String>().split_whitespace()
                    .map(|e| e.parse().ok().unwrap())
                    .collect()
}

fn main() {

    let nx = read_vec::<usize>();
    let N = nx[0];
    let x = nx[1];
    let mut a: Vec<isize> = read_vec();

    // ソートしてxが無くなるまで引いていく
    let mut res = x as isize;
    let mut i: usize = 0;
    a.sort();
    while (res >= 0) && (i < N) {
        res -= a[i];
        i += 1;
    }


    // N回未満ならそれを出力
    if i < N {
        println!("{}", i);
    }
    else{
        if res == 0{
            println!("{}", N);
        }
        else {
            println!("{}", N-1);
        }
    }

}
