#include<stdio.h>
#define M 100001
typedef struct qu{
  char name[100];
  int t;
}W;

W Q[M];
int head, tail;

void initialize(void){
  head = 0;
  tail = 0;
}
/*
int isEmpty(void){
if(*head == *tail) return 1;
else return 0; 
}

int isFull(void){
if(*head == *tail % M) return 1;
else return 0;
}*/

void enqueue(W x){
  /*  if(isFull(*head, *tail) == 1) {
      printf("error");
      exit(1);
      }*/
  Q[tail]= x;
  tail = (tail+1) % M;
  /*  if(*tail + 1 == M) *tail = 0;
      else *tail = *tail+1;*/
}

W dequeue(void){
  W x = Q[head];
  /* if(isEmpty() == 1){
  // printf("error");
  exit(1);
  }*/
  /* x = *Q;
   if((*head+1) == M) head = 0;
   else *head++;*/
  head = (head+1) % M;
  return x;
}







/*
  int initialize(void);
  int isEmpty(void);
int isFull(void);
void enqueue(int *, int);
int dequeue();
*/



int main(void){
  char name;
  int n, q, i;
  W Qm;
  int counter = 0;
  //  int *head, *tail;
  
  scanf("%d %d", &n, &q);
  for(i=0; i<n; i++){
    //  scanf("%s %d", Q[i].name, &Q[i].t);
    scanf("%s %d", Qm.name, &Qm.t);
    enqueue(Qm);
  }
  while(head != tail){
    W deq = dequeue();
    if(deq.t <= q){
      counter += deq.t;
      printf("%s %d\n", deq.name, counter);
    }
    else{ 
      counter +=q;
      deq.t -= q;
      enqueue(deq);
    }
  }
  
  

  
  /* for(i=0;;i++){
     if(Q[i].t > q){
     Q[i].t =  Q[i].t - q;
     dequeue(&Q[i]);     
     enqueue(&Q[*tail],Q[i]);
     counter += q;
     }
     else{   //Q[i].t < q
     dequeue(&Q[i]);  
     counter = Q[i].t;
      printf(Q[i].name, counter);
      }    
      }*/
  
  return 0;
}