#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <math.h>
#define MAX(X, Y) (((X) > (Y))? (X) : (Y))
#define MIN(X, Y) (((X) < (Y))? (X) : (Y))
int compare_int(const void *a, const void *b){
  return *(long int*)b - *(long int*)a; // 大きい順
}
int compare_int_small(const void *a, const void *b){
  return *(long int*)a - *(long int*)b; // 小さい順
}
// 公約数
long long int gcd(long long int a, long long int b){
  if(b == 0){
    return a;
  }else{
    return gcd(b, a % b);
  }
}
// 最小公倍数 = a * b / 最大公約数
// 公倍数
long long int lcm(long long int a, long long int b){
  return a * b / gcd(a, b);
}

#define TRUE 1
#define FALSE 0
#define LEN 100005

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

//int x = 0;
P *Q;
//P Q[LEN + 1];
int head = 0;
int tail = 0;
int n;

void initialize(){
  head = 0;
  tail = 0;
  Q = (P *)malloc(LEN * sizeof(P));
  if(Q == NULL){
    printf("メモリが確保できません\n");
    exit(EXIT_FAILURE);
  }
}

void finalize(){
  if(Q != NULL){
    free(Q);
    Q = NULL;
  }
}

int isEmpty(){
  if(head == tail){
    return TRUE;
  }else{
    return FALSE;
  }
}

int isFull(){
  if(head == (tail + 1) % LEN){
    return TRUE;
  }else{
    return FALSE;
  }
}

void enqueue(P x){
  if(isFull() != FALSE){
      printf("Overfllow\n");
  }else{
    Q[tail] = x;
    if((tail + 1) == LEN){
      tail = 0;
    }else{
      tail++;
    }
  }
}

P dequeue(){
  P x;
  //  fprintf(stderr, "-> dequeue\n");
  if(isEmpty() != FALSE){
    printf("Undrtfllow\n");
  }else{
    x = Q[head];
    if((head + 1 == LEN)){
      head = 0;
    }else{
      head++;
    }
  }
  return x;
}


// min
int main(void){
  int elaps = 0; // 経過時間
  int c;
  int i;
  int n = 0, q = 0;;
  P u;

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

  for(i = 1; i <= n; i++){
    scanf("%s", u.name);
    scanf("%d", &u.t); //ここが間違っている。Qを
    enqueue(u);
  }
  
  // キューが空になるまで続ける
  while(1){
    // 先頭からプロセスを取り出し、最大でもクオンタムだけ処理を行い、まだ必要な処理（時間）が残っている場合は再度キューに追加する

    // デキューしてプロセス取りだして
    u = dequeue();

    // クオンタイム実行
    for(int i = 0; i < q; i++){
      u.t--;
      elaps++;
      if(u.t <= 0){
	printf("%s %d\n", u.name, elaps);
	break;
      }else if(i == q - 1){
	enqueue(u);
      }
    }
    if(isEmpty() != FALSE){
      break;
    }
    // クオンタイムしてもまだ処理終っていないなら、エンキューする
  }

  //  free(data);

  finalize();
  return 0;

}

