#![allow(unused)] #![allow(non_snake_case)] #![allow(dead_code)] pub fn bsearch_irange(mut l: usize, mut r: usize, f: F) -> usize where F: Fn(usize) -> bool, { while l < r { let m = l + (r - l) / 2; if f(m) { r = m; } else { l = m + 1; } } l } fn main() { let input_str = std::io::read_to_string(std::io::stdin()).unwrap(); let mut input = input_str.split_whitespace(); let mut read_int = ||->usize {input.next().unwrap().parse().unwrap_or(0)}; let N = read_int(); let D :Vec = (0..N).map(|_| read_int()).collect(); let mut S = vec![0;N+1]; for i in 1..=N{ S[i] = S[i-1]+D[i-1]; } let Q = read_int(); for _ in 0..Q{ let (y,m,d,mut k) = (read_int(),read_int(),read_int(),read_int()); k += S[m-1]+d-1; //y年1月1日のk日後 にする let a = y+k/S[N]; k %= S[N]; let b = bsearch_irange(1,N+1,|x| S[x] >= k+1); let c = k+1-S[b-1]; println!("{} {} {}",a,b,c); } }