def min_coin_change(coins, amount):
    values = set(coins)
    dp = [float('inf')] * (amount + 1)
    dp[0] = 0
    for total in range(1, amount + 1):
        for coin in values:
            if coin <= total:
                dp[total] = min(dp[total], dp[total - coin] + 1)
    return -1 if dp[amount] == float('inf') else dp[amount]
