#include <stdio.h>
#include <string.h>
#define LEN 100006

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

P syori[LEN];
int head,tail,kosuu;//bunki=1;
void syoki(void);
int karahan(void);
int manhan(void);
void osikomi(P);
P osidasi(void);


int main()
{
  int keika=0, mini=0;
  int i, cutt;
  P keisyo;
  scanf("%d %d", &kosuu, &cutt);

  for ( i = 1; i <= kosuu; i++)
    {
      scanf("%s", syori[i].name);
      scanf("%d", &syori[i].t);
    }
  syoki();
  while(head!=tail)
    {
      keisyo=osidasi();
      if(cutt>keisyo.t)
	{
	  mini=keisyo.t;
	}
      else
	{
	  mini=cutt;
	}
      keisyo.t=keisyo.t-mini;
      keika=keika+mini;
      if(keisyo.t>0)
	{
	  osikomi(keisyo);
	}
      else
	{
	  printf("%s %d\n",keisyo.name,keika);
	}
    }
  return 0;
}

void syoki()
{
  head = 1;
  tail = kosuu+1;
}
/*
int karahan()
{
  if(head==tail)
    {
      return 1;
    }
  else
    {
      return 0;
    }
}

int manhan()
{
  if(head==(tail+1)%n)
    {
      return 1;
    }
  else
    {
      return 0;
    }

}
*/
void osikomi(P x)
{
  /*
    if(manhan()==1)
    {
    printf("エラー（オーバーフロー）\n");
    }
  
    if(buniki==1)
    {
    syori[tail%n]=x;
    bunki++;
    tail=(tail)%n;
    }
    else
    {
    syori[tail]=x;
    }
  
    if(tail+1==LEN+1)
    {
    tail=0;
    }
    else
    {
    tail++;
	
    }
  */
  syori[tail]=x;
  tail=(tail+1)%LEN;
}

P osidasi()
{
  P kaeri;
  /*
    if(karahan()==1)
    {
    printf("エラー（アンダーフロー）\n");
    }
  */
  kaeri=syori[head];
  /*
    if(head+1==LEN+1)
    {
    head=0;
    }
    else
    {
    head++;
    }
  */
  head=(head+1)%LEN;
  return kaeri;
}

