use std::collections::HashSet; fn getline() -> String{ let mut __ret=String::new(); std::io::stdin().read_line(&mut __ret).ok(); return __ret; } fn main() { let s=getline(); let a:Vec<_>=s.trim().split(' ').collect(); let N:i32=a[0].parse().unwrap(); let K:i32=a[1].parse().unwrap(); let s=getline(); let A:Vec<_>=s.trim().split(' ').collect(); let A:Vec=A.iter().map(|a| a.parse().unwrap()).collect(); let mut expression = Vec::new(); for i in 0..1 << A.len() { let mut select = Vec::new(); for j in 0..A.len() { if (1 << j) & i == 0 { select.push(A[j]); } } if select.len() == 0{ continue; } for sig in 0..1 << (select.len()-1) { let mut k = select[0]; for l in 0..(select.len()-1) { if (1 << l) & sig == 0 { k = k - select[l + 1]; }else{ k = -k + select[l + 1]; } } expression.push(k) } } let expression: HashSet = expression.into_iter().collect(); if expression.contains(&K){ print!("Yes"); }else{ print!("No"); } }