input: from typing import List
  from math import gcd
  from bisect import bisect_left
  
  def lcm(a: int, b: int) -> int:
      return a * b // gcd(a, b)
  
  def find_min_value(coins: List[int], k: int) -> int:
      """
      Given an integer array called coins representing different coin denominations and an integer k.
  
      You have an unlimited supply of each type of coin, but can't mix denominations.
  
      Find the k-th smallest amount that can be formed using these coins.
  
      Examples:
      >>> coins = [3,6,9], k = 3
      9
      >>> coins = [5,2], k = 7
      12
  
      Constraints:
      1 <= coins.length <= 15
      1 <= coins[i] <= 25
      1 <= k <= 2 * 10^9
      coins contains distinct integers.
      """
output:     amounts = set()
      for coin in coins:
          for i in range(1, k + 1):
              amounts.add(i * coin)
              if len(amounts) > k * len(coins):
                  break
  
      sorted_amounts = sorted(amounts)
      return sorted_amounts[k - 1]