#nullable enable #region var (_input, _iter) = (Array.Empty(), 0); T I() where T : IParsable { while (_iter >= _input.Length) (_input, _iter) = (Console.ReadLine()!.Split(' '), 0); return T.Parse(_input[_iter++], null); } #endregion static T[] Range(int n, Func F) => Enumerable.Range(0, n).Select(_ => F()).ToArray(); var n = I(); var dz = Range(n, I); var q = I(); var queries = Range(q, () => (I(), I(), I(), I())); var ds = dz.Sum(); var dsz = new long[n + 1]; for (var i = 0; i < n; i++) dsz[i + 1] = dz[i]; for (var i = 1; i <= n; i++) dsz[i] += dsz[i - 1]; var ans = new List(); for (var j = 0; j < q; j++) { var (y, m, d, k) = queries[j]; k += dsz[m - 1] + d - 1; var (kp, kq) = long.DivRem(k, ds); y += kp; var pass = 0; var fail = n + 1; while (Math.Abs(pass - fail) > 1) { var mid = (pass + fail) >> 1; if (dsz[mid] <= kq) pass = mid; else fail = mid; } m = pass + 1; d = kq - dsz[pass] + 1; if (m > n) { m = 1; y++; } ans.Add(y + " " + m + " " + d); } Console.WriteLine(string.Join(Environment.NewLine, ans));