use std::collections::VecDeque; fn main() { let mut nml = String::new(); std::io::stdin().read_line(&mut nml).ok(); let nml: Vec = nml.trim().split_whitespace().map(|s| s.parse().unwrap()).collect(); let n = nml[0]; let m = nml[1]; let l = nml[2]; 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 limit = l.max(m); let mut used = vec![false; limit+1]; let mut deque = VecDeque::new(); deque.push_back(l); used[l] = true; while let Some(u) = deque.pop_front() { for &v in a.iter() { let val = (v + u) / 2; if limit >= val && !used[val] { used[val] = true; deque.push_back(val); } } } if used[m] { println!("Yes"); } else { println!("No"); } }