#!/usr/bin/env pypy3

# université pierre et marie curie - c. dürr - 2017
# http://www-desir.lip6.fr/~durrc/Iut/cpa/2017/tme5-progdyn/

# Rendre la monnaie
# algorithme: prod-dyn sur une grille
# complexité: O(n C)

from sys import stdin

def readint():
    return int(stdin.readline())

def readints():
    return map(int, stdin.readline().split())

def coin_change(v, C):
    """Coin change

    :param v: table of non negative values
    :param C: target value
    :returns k: minimum number of coins that produce C
    :complexity: O(n*C)

    problème:
        A[i][m] = nb minimal de pièces parmi v[0] à v[i] pour constituer la valeur m
    cas de base:
        A[0][m] = m / v[0] si m est un multiple de v[0] sinon = infini
    pour i > 0:
        A[i][m] = min( A[i-1][m], A[i][m - v[i]] + 1 )  # attention au cas ou m < v[i]
    complexité:
        O(n*C) variables, récursions sur O(1) expressions
        complexité = O(n*C)
    """
    n = len(v)
    v.sort()
    A = [[float('inf') for y in range(C + 1)] for i in range(n)]
    i = 0
    while i * v[0] <= C:
        A[0][i * v[0]] = i
        i += 1
    for i in range(1, n):
        k = min(v[i], C + 1)
        for m in range(k):
            A[i][m] = A[i - 1][m]
        for m in range(k, C+1):
            A[i][m] = min(A[i - 1][m], A[i][m - v[i]] + 1)
    return int(A[n - 1][C])


n, C = readints()
v = [readint() for _ in range(n)]
print(coin_change(v, C))
