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 kth_smallest_coin_amount(coins: List[int], k: int) -> int:
      """
      Given an integer array coins representing different coin denominations and an integer k, find the k-th smallest amount that can be obtained using an infinite number of coins of one denomination at a time.
  
      Note: Combining coins of different denominations is not allowed.
  
      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
      The coins array contains distinct integers.
      """
output:     coins.sort()
      left, right = 1, coins[0] * k
      
      def count_able_amounts(x):
          return sum(x // coin for coin in coins)
      
      while left < right:
          mid = (left + right) // 2
          if count_able_amounts(mid) < k:
              left = mid + 1
          else:
              right = mid
  
      return left