#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct cell{
 char name[11];
 int data;
 int time;
 struct cell *next;
}cell;

typedef struct que{
 cell* front;
 cell* rear;
}que;




cell* makecell(char str[11],int data){

cell *new=(cell*)malloc(sizeof(cell));
strcpy(new->name,str);
new->data=data;
new->next=NULL;

return new;
}

void enque(que *Q,cell *new){
 if((Q->front)==NULL){Q->front=new;Q->rear=new;}/*要素1つ*/
 else{Q->rear->next=new;Q->rear=new;}
 return;
}

void deque(que *Q){
 if(Q->front->next==NULL){Q->front=NULL;Q->rear=NULL;}
 else{Q->front=Q->front->next;}

return;
}




int main(){
int n,i,q,temp;
int tmax=0;
int t;
char str[11];
cell *new;
cell *p;
que Q1,Q2;
Q1.front=NULL;
Q1.rear=NULL;
Q2.front=NULL;
Q2.rear=NULL;

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

for(i=0;i<n;i++){
 scanf("%s %d",str,&temp);
 tmax+=temp;
 new=makecell(str,temp);
 enque(&Q1,new);
}

t=0;
while(t<tmax){
 if((Q1.front)->data==q){
  t+=q;
  (Q1.front)->time=t;
  enque(&Q2,Q1.front);
  deque(&Q1);
 }
 else if((Q1.front)->data < q){
  t+=(Q1.front)->data;
  (Q1.front)->time=t;
  enque(&Q2,Q1.front);
  deque(&Q1);
 }
 else if((Q1.front)->data > q){
  t+=q;
  (Q1.front)->data-=q;
  enque(&Q1,Q1.front);
  deque(&Q1);

 }


}





p=Q2.front;

while(p!=NULL){
 printf("%s %d\n",p->name,p->time);
 if(p->time==tmax){break;}
 p=p->next;
 
}

return 0;
}
