fn main() { let stdin = std::io::read_to_string(std::io::stdin()).unwrap(); let mut stdin = stdin.split_ascii_whitespace(); let n: usize = stdin.next().unwrap().parse().unwrap(); let x: u32 = stdin.next().unwrap().parse().unwrap(); let a: Vec = (0..n) .map(|_| stdin.next().unwrap().parse().unwrap()) .collect(); use std::io::Write; std::io::stdout() .write_all(output(solve(x, a)).as_bytes()) .unwrap(); } fn prepare(a: Vec) -> [u32; 100_001] { let mut count_of = [0; 100_001]; a.into_iter().for_each(|a| count_of[a as usize] += 1); count_of } fn solve(x: u32, a: Vec) -> u64 { let count_of = prepare(a); let mut ans = 0; count_of .iter() .enumerate() .take_while(|&(i, _)| i <= x as usize) .for_each(|(i, &c)| ans += c as u64 * count_of[x as usize - i] as u64); ans } fn output(ans: u64) -> String { ans.to_string() + "\n" }