import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.InputMismatchException; import java.util.List; public class Main { static StringBuilder out = new StringBuilder(); static String ls = System.lineSeparator(); static final String OK = "Possible"; static final String NG = "Impossible"; static FastReader fr = new FastReader(); // static final int INF = Integer.MAX_VALUE - 300000000; public static void main(String[] args) throws Exception, IOException { int n = fr.nextInt(); int m = fr.nextInt(); List nums = fr.nextIntList(n); Collections.sort(nums); int sum = 0; int count = 0; for(int num : nums){ sum += num; if(sum > m) printExit(""+count); count++; } System.out.println(count); } static void printExit(String msg) { System.out.println(msg); System.exit(0); } } class FastReader { private InputStream in = System.in; private byte[] buf = new byte[1024]; private int charNum; private int charLen; private StringBuilder sb = new StringBuilder(); public int read() { if (charLen == -1) throw new InputMismatchException(); if (charNum >= charLen) { charNum = 0; try { charLen = in.read(buf); } catch (IOException e) { throw new InputMismatchException(); } if (charLen <= 0) return -1; } return buf[charNum++]; } public String next() { int c = read(); while (isWhitespace(c)) { c = read(); } sb.setLength(0); do { sb.appendCodePoint(c); c = read(); } while (!isWhitespace(c)); return sb.toString(); } public char[] nextCharArray() { return next().toCharArray(); } public int nextInt() { return (int) nextLong(); } public int[] nextIntArray(int n) { int[] array = new int[n]; for (int i = 0; i < n; i++) array[i] = nextInt(); return array; } public List nextIntList(int n) { Integer[] array = new Integer[n]; for (int i = 0; i < n; i++) array[i] = nextInt(); return Arrays.asList(array); } public int[][] nextIntArray2D(int n, int m) { int[][] array = new int[n][m]; for (int i = 0; i < n; i++) array[i] = nextIntArray(m); return array; } public List nextIntsList(int n, int m) { List list = new ArrayList<>(n); for (int i = 0; i < n; i++) list.add(nextIntArray(m)); return list; } public long nextLong() { int c = read(); while (isWhitespace(c)) { c = read(); } int sgn = 1; if (c == '-') { sgn = -1; c = read(); } long res = 0; do { if (c < '0' || c > '9') throw new InputMismatchException(); res *= 10; res += c - '0'; c = read(); } while (!isWhitespace(c)); return res * sgn; } public double nextDouble() { return Double.parseDouble(next()); } public double[] nextDoubleArray(int n) { double[] array = new double[n]; for (int i = 0; i < n; i++) array[i] = nextDouble(); return array; } public boolean isWhitespace(int c) { return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1; } }