/*
   name(i)と処理時間time(i)を持つｎ個のプロセスが並んでいる。
   cpuがプロセスを順番に処理する。
   各プロセスは最大qmsの処理を行い、プロセスが完了しなければ、
   そのプロセスは列の最後尾に移動し、cpuは次のプロセスを処理する。

   ラウンドロビンススケジューリングと呼ばれる処理方法で、各プロセス
   が完了した順にプロセス名と終了時刻を出力する

   input:
   5 100
   p1 150
   p2 80
   p3 200
   p4 350
   p5 20

   output:
   p2 180
   p5 400
   p1 450
   p3 550
   p4 800
*/

#include <stdio.h>
#include <string.h>

#define LEN 100005

typedef struct pp {
   char name[100];
   int t;
}P;

//キューを確保
P Q[LEN+1];
int head, tail, n;

void enqueue(P x){
   Q[tail] = x;
   tail = (tail + 1) % LEN;
}

P dequeue(){
   P x = Q[head];
   head = (head + 1) % LEN;
   return x;
}

int min(int a, int b) { return a < b ? a : b; } //最小値を返す

int main(){
   int elaps = 0, c;
   int i,q;
   P u;

   scanf("%d %d", &n, &q);

   //キューに追加
   for (i = 1; i <= n; i++) {
     scanf("%s", Q[i].name);
     scanf("%d", &Q[i].t);
   }

   head = 1; 
   tail = n+1;

   //計算
   while (head != tail) {
      u = dequeue();
      c = min(q, u.t); //q,またはu.tだけ処理を行う
      u.t -= c;        //残りの時間を計算
      elaps += c;      //かかった総時間を計算

      if (u.t > 0)
         enqueue(u);   //処理が完了しなければキューに追加
      else {
         printf("%s %d\n", u.name, elaps); //完了した順に出力
      }
   }

   return 0;
}
