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

struct list{
	char name[15];
	int time;
};

int main()
{
	int n,q,T=0;
	int i=0;
	scanf("%d%d",&n,&q);//要素数とターンアラウンドタイムの受け取り
	int coun=n;
	struct list node[n+1];
	while(coun--)//入力の受け取り
	{
		scanf("%s %d",&node[i].name,&node[i].time);
		i++;
	}
	for(int head=0,tail=n;head!=tail;head=(head+1)%(n+1))//すべての処理が完了する(tailに到達する)まで処理を続ける
	{
		i=head;
		if(node[i].time<=q)//処理が与えられたターンアラウンドタイムの時間内に終了するとき
		{
			T+=node[i].time;
			printf("%s %d\n",node[i].name,T);
			node[i].time=0;//残り処理必要時間をゼロにする
		}
		else//処理が与えられたターンアラウンドタイムの時間内に終了しないとき
		{
			T+=q;//ターンアラウンドタイムより長い処理時間が必要な時ターンアラウンドタイムを累計時間に付加する
			node[tail].time=node[i].time-q;//残り処理必要時間をターンアラウンドタイム分だけ減らす
			strcpy(node[tail].name,node[i].name);//一番後ろに処理しきれなかった命令を並ばせる
			tail=(tail+1)%(n+1);
		}
	}
	return 0;
}

