#include <bits/stdc++.h>
using namespace std;
template <typename T>
void printmatrix(vector<vector<T> > ar) {
  for (int i = 0; i < (int)ar.size(); i++) {
    for (int j = 0; j < (int)ar[0].size(); j++) {
      cout << ar[i][j];
    }
    cout << endl;
  }
}
template <typename T>
void printvector(vector<T> vec) {
  for (int i = 0; i < (int)vec.size(); i++) {
    cout << vec[i] << endl;
  }
}
template <typename T>
void unique(vector<T>& vec) {
  sort(vec.begin(), vec.end());
  vec.erase(unique(vec.begin(), vec.end()), vec.end());
}
template <typename T>
vector<T> cumsum(vector<T> vec) {
  vector<T> newvec((T)vec.size());
  int tmp = 0;
  for (int i = 0; i < (int)vec.size(); i++) {
    tmp += vec[i];
    newvec[i] = tmp;
  }
  return newvec;
}
template <typename T>
T digitsum(T x) {
  T y = 0;
  while (x) {
    y += x % 10;
    x /= 10;
  }
  return y;
}
template <typename T>
T gcd(T x, T y) {
  if (x == 0 || y == 0) {
    return 0;
  }
  while (x != y) {
    if (x > y) {
      x -= y;
    } else {
      y -= x;
    }
  }
  return x;
}
long long gcd(long long a, long long b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
long long lcm(long long a, long long b) {
  long long g = gcd(a, b);
  return a / g * b;
}
void solve() {
  long long N, x;
  cin >> N >> x;
  vector<int> a(N);
  for (int i = 0; i < N; i++) {
    cin >> a[i];
  }
  sort((a).begin(), (a).end());
  int ans = 0;
  for (int i = 0; i < N; i++) {
    if (x >= a[i]) {
      ans++;
      x -= a[i];
    }
  }
  if (x > 0 && ans != 0) {
    ans--;
  }
  cout << ans << endl;
  return;
}
int main(int argc, char const* argv[]) {
  solve();
  return 0;
}
