import java.util.Arrays;
public class CoinCollect {
public static int coinCollect(int[] coins, int m) {
int n = coins.length;
int[][] dp = new int[n+1][m+1];
for (int i = 0; i <= n; i++) {
Arrays.fill(dp[i], Integer.MAX_VALUE);
dp[i][0] = 0;
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
dp[i][j] = dp[i-1][j];
if (j >= coins[i-1]) {
dp[i][j] = Math.min(dp[i][j], dp[i][j-coins[i-1]] + 1);
}
}
}
return dp[n][m] == Integer.MAX_VALUE ? -1 : dp[n][m];
}
public static void main(String[] args) {
int[] coins = {1, 2, 5};
int m = 11;
System.out.println(coinCollect(coins, m));
coins = new int[]{1, 4, 5};
m = 8;
System.out.println(coinCollect(coins, m));
coins = new int[]{2};
m = 3;
System.out.println(coinCollect(coins, m));
}
}