#include<stdio.h>
#include<stdlib.h>

#define N 100005

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

P Q[N+1];
int head,tail,n;

void enqueue(P x); //キュー末尾にヨウ素を追加
P dequeue();//キューの先頭から要素を取り出す
int min(int a,int b){
	int t;
	if(a>=b){t=b;}
	else {t=a;}
	
	return t;}

  /*／￣＼
○ ／￣￣￣＼ヘ
  /・   ・        ＼>
／￣￣￣＼   Ｖ|
｜ ――― ｜   ｜|
＼＿＿＿／   ∧|
    ＼                  ／〉
       ￣￣￣￣
    ヽ(´･w･)ﾉ
         |    /
         UU
うっせぇ、アンコウ投げんぞ!*/

int main(void){
	
	int n,c,q;
	int elaps = 0;
	P u;
	scanf("%d %d",&n, &q);
	
	for(int i=1;i<=n;i++){
		scanf("%s",Q[i].name);
		scanf("%d",&Q[i].y);
	}
	
	head =1;
	tail = n+1;
	
	while(head != tail){
		
		u = dequeue();
		c = min(q, u.y); //処理時間のどっちが短いか
		u.y -=c; //残り処理時間
		elaps += c;  //トータルの処理時間
		
			if(u.y>0){ enqueue(u);}
		else{
			printf("%s %d\n",u.name,elaps);
		}
				
	}
	
	
	return 0;
}

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

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

