import sys from collections import defaultdict MOD = 10**9 + 7 def factorize(k): factors = {} i = 2 while i * i <= k: while k % i == 0: factors[i] = factors.get(i, 0) + 1 k = k // i i += 1 if k > 1: factors[k] = 1 return sorted(factors.items()) def main(): input = sys.stdin.read().split() ptr = 0 N = int(input[ptr]) ptr += 1 K = int(input[ptr]) ptr += 1 A = list(map(int, input[ptr:ptr+N])) if K == 1: print((pow(2, N, MOD) - 1) % MOD) return factors = factorize(K) m = len(factors) primes = [p for p, e in factors] required = [e for p, e in factors] # Check if each prime is present in at least one element has_prime = [False] * m for a in A: for i in range(m): p = primes[i] temp = a cnt = 0 while temp % p == 0 and temp != 0: cnt += 1 temp = temp // p if cnt > 0: has_prime[i] = True if not all(has_prime): print(0) return # Precompute exponents for each element exponents_list = [] for a in A: exps = [] for (p, e) in factors: temp = a cnt = 0 while temp % p == 0 and temp != 0: cnt += 1 temp = temp // p exps.append(cnt) exponents_list.append(exps) # Dynamic programming dp = defaultdict(int) initial_state = tuple([0]*m) dp[initial_state] = 1 for exps in exponents_list: new_dp = defaultdict(int, dp) for state in list(dp.keys()): current_count = dp[state] new_state = list(state) for i in range(m): new_state[i] = min(state[i] + exps[i], required[i]) new_state_tuple = tuple(new_state) new_dp[new_state_tuple] = (new_dp[new_state_tuple] + current_count) % MOD dp = new_dp result = 0 for state in dp: valid = True for i in range(m): if state[i] < required[i]: valid = False break if valid: result = (result + dp[state]) % MOD print(result % MOD) if __name__ == "__main__": main()