use std::collections::HashMap; const MOD: usize = 1e9 as usize + 7; fn gcd(a: usize, b: usize) -> usize { if b == 0 { return a; } gcd(b, a%b) } fn main() { let mut nk = String::new(); std::io::stdin().read_line(&mut nk).ok(); let nk: Vec = nk.trim().split_whitespace().map(|s| s.parse().unwrap()).collect(); let n = nk[0]; let k = nk[1]; let mut a = String::new(); std::io::stdin().read_line(&mut a).ok(); let a: Vec = a.trim().split_whitespace().map(|s| s.parse().unwrap()).collect(); let mut dp = HashMap::new(); dp.insert(1, 1usize); for &v in a.iter() { let mut next_dp = HashMap::new(); for (&gcdval, &cnt) in dp.iter() { *next_dp.entry(gcdval).or_insert(0usize) += cnt; *next_dp.entry(gcdval).or_insert(0usize) %= MOD; let val = gcd(v, k); let val = gcd(gcdval*val, k); *next_dp.entry(val).or_insert(0usize) += cnt; *next_dp.entry(val).or_insert(0usize) %= MOD; } dp = next_dp; } if k == 1 { println!("{}", dp.get(&k).unwrap()-1); } else { println!("{}", dp.get(&k).unwrap_or(&0)); } }