module Queue' = struct
  type 'a t = {
    mutable front : int;
    mutable capa  : int;
    mutable index : int;
    mutable length : int;
    mutable elems : (string * int) array
  }

  let is_empty (t: (string * int) t) = t.length = 0

  let create ?(capacity=2) () =
    let c = log10 (float_of_int capacity) /. log10 2.
            |> ceil |> ( ** ) 2. |> int_of_float in
    { front = 0;
      capa  = c;
      index = 0;
      length = 0;
      elems = Array.make c ("",0)}

  let enq (t: (string * int) t) (a: string * int) =
    let (elems: (string * int) array) = t.elems in
    elems.(t.index) <- a;
    t.length <- t.length + 1;
    t.index <- (t.index + 1) lor t.capa |> (lxor) t.capa

  let deq (t: (string * int) t) =
    let (elems: (string * int) array) = t.elems in
    let (front: int) = t.front in
    let (res: string * int) = elems.(front) in
    t.front <- (t.front+1) lor t.capa |> (lxor) t.capa;
    t.length <- t.length - 1;
    res
end

let () =
  let open Queue' in
  let (n:int),(quantum:int) = Scanf.scanf "%d %d\n" (fun a b -> a,b) in
  let (q:(string * int) t) = create ~capacity:n () in
  for i=1 to n do
    enq q (Scanf.scanf "%s %d\n" (fun a b -> a,b));
  done;
  let (sum:int ref) = ref 0 in
  while not (is_empty q) do
    let (p:string),(t:int) = deq q in
    if t <= quantum then (sum := !sum+t; Printf.printf "%s %d\n" p !sum)
    else
      (enq q (p,t-quantum); sum := !sum+quantum)
  done