package main
import (
"fmt"
)
func main() {
num, target := 0, 0
for {
n, _ := fmt.Scan(&num, &target)
if n == 0 {
break
} else {
coins := make([]int, num)
for i:=0; i<len(coins); i++ {
fmt.Scan(&coins[i])
}
dp := make([][]int, len(coins)+1)
for i:=0; i<len(dp); i++ {
dp[i] = make([]int, target+1)
if i==len(dp)-1 {
for j:=1; j<len(dp[i]); j++ {
dp[i][j] = -1
}
}
}
for i:=len(dp)-2; i>=0 ; i-- {
for j:=1; j <len(dp[i]); j++ {
dp[i][j] = dp[i+1][j]
if j>= coins[i] {
if dp[i][j-coins[i]] >= 0 {
if dp[i][j] == -1 {
dp[i][j] = dp[i][j-coins[i]] + 1
} else {
dp[i][j] = min(dp[i][j], dp[i][j-coins[i]] + 1)
}
}
}
}
}
fmt.Println(dp[0][target])
}
}
}
// func process(target int, coins []int, i int) int{
// if target == 0 {
// return 0
// }
// if i == len(coins) {
// return -1
// }
// sum := target+1
// for k:=0; k*coins[i] <= target; k++ {
// sum1 := process(target-k*coins[i], coins , i+1)
// if sum1 == -1 {
// continue
// }
// sum = min(sum1+k, sum)
// }
// if sum == target+1 {
// return -1
// }
// return sum
// }
func min(a, b int) int {
if a<b {
return a
}
return b
}