#pragma region header
//ある程度のテンプレ(いじって使う)
//これとBFS、あとその時その時で使うものはここに書く
vector<bool> seens;
void dfs(const Graph& G, int v) {
	seens[v] = true; // v を訪問済にする

	// v から行ける各頂点 next_v について
	for (auto next_v : G[v]) {
		if (seens[next_v]) continue; // next_v が探索済だったらスルー
		dfs(G, next_v); // 再帰的に探索
	}
}



// ========================================================================
#pragma endregion

/*signed*/ int main() {
	ll n, x; cin >> n >> x;
	vl a(n);
	for (int i = 0; i < n; i++) cin >> a[i];
	sort(a.begin(), a.end());
	ll ans = 0;
	for (int i = 0; i < n; i++) {
		if (a[i] <= x) {
			ans++;
			x -= a[i];
		}
		else break;
		if (i == n - 1 && x > 0) ans -= 1;
	}
	cout << ans << endl;

	return 0;
}