import Data.Array.IO
import Data.Array
import Text.Regex

data IOqueue a = IOq (IOArray Int a,Int,Int,Int)
--??´??°?????????????????????????????¬???????????????????????????????????????????????????????????????????????????

newqueue::Int -> a -> IO (IOqueue a)
newqueue n initial = do
        ar<-newArray (0,n-1) initial
        return (IOq (ar,0,0,n))

enqueue::IOqueue a -> a -> IO (IOqueue a)
enqueue (IOq (ar,hd,tl,sz)) x = do
        writeArray ar tl x
        return (IOq (ar,hd,(mod (tl+1) sz),sz))

dequeue::IOqueue a -> IO (a,IOqueue a)
dequeue (IOq (ar,hd,tl,sz)) = do
        dat <- readArray ar hd
        return (dat,IOq (ar,mod (hd+1) sz,tl,sz))

isfull::IOqueue a -> Bool
isfull (IOq (_,hd,tl,sz)) = (mod (tl+1) sz == hd)

isempty::IOqueue a -> Bool
isempty (IOq (_,hd,tl,_)) = (hd == tl)

--??\???IOArray??????????´???´???????£?

--utilities_with_list
list_enqueue::IOqueue a -> [a] -> IO (IOqueue a)
list_enqueue q []     = return q
list_enqueue q (x:xs) = (enqueue q x)>>=(\ q -> (list_enqueue q xs))

n_dequeue::IOqueue a -> Int -> IO ([a],IOqueue a)
n_dequeue q 0 = return ([],q)
n_dequeue q n = do
          (x,q)<-dequeue q
          (xs,q')<- n_dequeue q (n-1)
          return ((x:xs), q')


--for alds1_3_b_problem



main::IO()
main =do
  nqc<-getLine
  let n:quant:[]=map read (words nqc)::[Int]
  q'<-newqueue (n+1) ([],0)
  dat_ls<-get_proc n
  q''<-list_enqueue q' dat_ls
  do_proc q'' quant 0


get_proc::Int-> IO [(String,Int)]
get_proc 0 = return []
get_proc n = do
  name_time<-getLine
  let name:timec:[]= (words name_time)
  let time = read timec ::Int
  ls<-get_proc (n-1)
  return ((name,time):ls)

do_proc::IOqueue (String,Int) -> Int -> Int -> IO()
do_proc queue quant now = if isempty queue then return ()
                                           else do
                                              ((name,time),queue')<-dequeue queue
                                              if time>quant then do
                                                              queue''<-enqueue queue' (name,time-quant)
                                                              do_proc queue'' quant (now+quant)
                                                            else do
                                                              putStr (name++" "++(show (now+time)))
                                                              putStr "\n"
                                                              do_proc queue' quant (now+time)