fn main() { let mut xx = String::new(); std::io::Read::read_to_string(&mut std::io::stdin(), &mut xx).ok(); let xx: Vec<&str> = xx.split_whitespace().collect(); let m: usize = xx[1].parse().unwrap(); let k: u64 = xx[2].parse().unwrap(); let mut bb: Vec = xx[4..4 + m].iter().map(|&s| s.parse().unwrap()).collect(); let mut aa: Vec = xx[4 + m..].iter().map(|&s| s.parse().unwrap()).collect(); let op = match xx.get(3) { Some(&"+") => |a, b| a + b, Some(&"*") => |a, b| a * b, _ => unreachable!(), }; aa.sort_unstable(); bb.sort_unstable(); aa.reverse(); bb.reverse(); let mut answer = 0; let mut left = 0; let mut right = bb.len(); for &a in &aa { while left < right { let center = (left + right) / 2; if op(a, bb[center]) >= k { left = center + 1; } else { right = center; } } answer += left; left = 0; } println!("{answer}"); }