fn run<'a, I, W>(mut scanner: I, mut writer: W) where I: Iterator, W: std::io::Write, { macro_rules! scan { ([$t:tt; $n:expr]) => ((0..$n).map(|_| scan!($t)).collect::>()); (($($t:tt),*)) => (($(scan!($t)),*)); (Usize1) => (scan!(usize) - 1); (Bytes) => (scan!(String).into_bytes()); ($t:ty) => (scanner.next().unwrap().parse::<$t>().unwrap()); } macro_rules! input { ($($($v:ident)* : $t:tt),* $(,)?) => ($(let $($v)* = scan!($t);)*); } macro_rules! println { ($($arg:tt)*) => (writeln!(writer, $($arg)*).ok()); } for _ in 0..scan!(usize) { input! { n: i64, a: i64, w: i64, k: i64, } if n == 1 { println!("{}", a - (1 + w) * w / 2); } else if k == 1 { println!("{}", a); } else if k < n { if a < k - 1 { if w > n - k { println!("-1"); } else { println!(":("); } } else { let x = a / k; if (x + 1) * (k - 1) + x <= a { println!("{}", x); } else { println!("{}", x - 1); } } } else { let mut a = a; let mut w = w; let mut i = 1; while w >= n && i * n <= a { a -= i * n; w -= n; i += 1; } if i * w <= a { a -= i * w; let x = a / k; if (x + 1) * (k - 1) + x <= a { println!("{}", x); } else { println!("{}", x - 1); } } else { while a - i >= 0 { a -= i; w -= 1; } println!("{}", a - (i + (i + w - 1)) * w / 2); } } } } fn main() { let ref mut buf = Vec::new(); std::io::Read::read_to_end(&mut std::io::stdin(), buf).ok(); let scanner = unsafe { std::str::from_utf8_unchecked(buf).split_ascii_whitespace() }; let stdout = std::io::stdout(); let writer = std::io::BufWriter::new(stdout.lock()); run(scanner, writer); }