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

#define LEN 50001
#define min(x,y) x < y ? x:y

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

void Initialize(int *,int *,int);
int IsEmpty(int,int);
int IsFull(int,int);
void Enqueue(P [],int *,int *,P);
P Dequeue(P [],int *,int *);
  
int main(){
  P Q[LEN];
  int head,tail,n;
  int elaps = 0,c;
  int i,q;
  P u;

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

  for (i = 0;i < n;i++){
    scanf("%s",Q[i].name);
    scanf("%d",&Q[i].t);
  }

  Initialize(&head,&tail,i);

  while (head != tail){
    u = Dequeue(Q,&head,&tail);
    c = min(q,u.t);
    u.t -= c;
    elaps += c;
    
    if (u.t > 0)
      Enqueue(Q,&head,&tail,u);

    else
      printf("%s %d\n",u.name,elaps);
    
  }
  
  return 0;
}

void Initialize(int *head,int *tail,int i){
  *head = 0;
  *tail = i;
}

int IsEmpty(int head,int tail){
  if (head == tail)
    return 1;

  return 0;
}

int IsFull(int head,int tail){
  if (head == (tail + 1) % LEN)
    return 1;

  return 0;
}

void Enqueue(P Q[],int *head,int *tail,P x){
  if (IsFull(*head,*tail)){
    fprintf(stderr,"Over flow\n");
    exit(1);
  }

  Q[*tail] = x;

  if (*tail + 1 == LEN)
    *tail = 0;

  else
    (*tail)++;
}

P Dequeue(P Q[],int *head,int *tail){
  P x;
  
  if (IsEmpty(*head,*tail)){
    fprintf(stderr,"Under flow\n");
    exit(2);
  }

  x = Q[*head];

  if (*head + 1 == LEN)
    *head = 0;

  else
    (*head)++;

  return x;
}

