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_value(denominations: List[int], k: int) -> int:
      """
      Given an integer array representing different coin denominations and an integer k, return the k-th smallest value that can be obtained using these coins.
      Note that you have an unlimited supply of each denomination, but you cannot mix denominations.
  
      Examples:
      >>> denominations = [3,6,9], k = 3
      9
      >>> denominations = [5,2], k = 7
      12
  
      Constraints:
      1 <= denominations.length <= 15
      1 <= denominations[i] <= 25
      1 <= k <= 2 * 10^9
      denominations contains pairwise distinct integers.
      """
output:     
      denominations = sorted(set(denominations))
      multiples = []
      for coin in denominations:
          for i in range(1, k+1):
              multiples.append(coin * i)
      
      multiples = sorted(set(multiples))
      return multiples[k-1]
  