use std::io::*; use std::str::FromStr; //use std::num; //use std::cmp; //use std::collections::VecDeque; //use std::io::{self, BufRead}; fn hex_to_binary(hex_string: &str, x: u32) -> Option { match i64::from_str_radix(hex_string, x) { Ok(decimal) => Some(format!("{}", decimal)), Err(_) => None, } } fn main() { let n: usize = read(); let mut m: usize = read(); let mut c = vec![0; n]; let mut ans = 0; for _i in 0..c.len(){ c[_i] = read(); } for _i in 0..c.len(){ for _j in 0..c.len() - _i - 1{ if c[_j] > c[_j + 1]{ c.swap(_j, _j + 1); } } } for _i in 0..c.len(){ loop{ if c[_i] == 0{ continue; }else if m > 0{ c[_i] -= 1; m -= 1; } if c[_i] == 0{ break; } if m == 0{ break; } } } for _i in 0..c.len(){ if c[_i] == 0{ ans += 1; } } print!("{}",ans); } pub fn my_floor(x: f64) -> f64 { let rounded = (x * 1000.0).floor() / 1000.0; rounded } pub fn upper_lower(x: char) -> char { let result: char; if x.is_uppercase() { result = x.to_ascii_lowercase(); } else if x.is_lowercase() { result = x.to_ascii_uppercase(); } else { result = x; } result } pub fn maxf_2(x: f64, y: f64) -> f64 { let result; if x >= y { result = x; } else { result = y; } result } pub fn max_2(x: usize, y: usize) -> usize { let result; if x >= y { result = x; } else { result = y; } result } pub fn min_2(x: usize, y: usize) -> usize { let result; if x >= y { result = y; } else { result = x; } result } pub fn max_3(x: isize, y: isize, z: isize) -> isize { let result; if x >= y && y >= z { result = x; } else if x >= z && z >= y { result = x; } else if y >= x && x >= z { result = y; } else if y >= z && z >= x { result = y; } else if z >= x && x >= y { result = z; } else { result = z; } result } pub fn min_3(x: isize, y: isize, z: isize) -> isize { let result; if x <= y && y <= z { result = x; } else if x <= z && z <= y { result = x; } else if y <= x && x <= z { result = y; } else if y <= z && z <= x { result = y; } else if z <= x && x <= y { result = z; } else { result = z; } result } pub fn read_text() -> String { let mut word = String::new(); std::io::stdin().read_line(&mut word).ok(); let answer = word.trim().to_string(); answer } pub fn read() -> T { let stdin = stdin(); let stdin = stdin.lock(); let token: String = stdin .bytes() .map(|c| c.expect("failed to read char") as char) .skip_while(|c| c.is_whitespace()) .take_while(|c| !c.is_whitespace()) .collect(); token.parse().ok().expect("failed to parse token") } pub fn read_array() -> Vec { let array: String = read(); let chars: Vec = array.trim().chars().collect::>(); chars } pub fn get_data() -> Vec { let mut s: String = String::new(); std::io::stdin().read_line(&mut s).ok(); let vec: Vec = s .trim() .split_whitespace() .map(|e| e.parse().ok().unwrap()) .collect(); vec } pub fn get_chars() -> Vec { let mut s: String = String::new(); std::io::stdin().read_line(&mut s).ok(); let vec: Vec = s.trim().chars().collect::>(); vec }