import java.util.Scanner;

class Main {
	public static void main(String args[]) {
		Scanner scanner = new Scanner(System.in);
		int  num = scanner.nextInt();//要素数
		int  time = scanner.nextInt();//要素数
		int[] array = new int[num];
		String[] pro = new String[num];
		
		//配列作り
		for(int i = 0; i < num; i ++ ){
			pro[i] = scanner.next();		//マーク
			array[i] = scanner.nextInt();	//数字
		}
		
		Queue(pro, array,num,time);
		
		scanner.close();
	}

	public static void Queue( String[] pro, int[] array,int num,int time){
		int sub;
		int i;
		int end_count = 0;
		int end_count_now;
		int time_count = 0;
		boolean judge_end = false;
		
		//ラウンドロビンスケジューリング
		while( end_count < num  ){										//全部終わったら終わり
			end_count_now = 0;
			judge_end = false;
			
			for( i = 0; i < num - end_count; i ++ ){
				sub = array[i] - time;
				if(sub <= 0){
					time_count += array[i];								//時間分だけ足す
					System.out.println(pro[i] +  " " + time_count);		//時間内なら出力
					end_count_now ++;									//今回っている中での終わった数
					judge_end = true;									//終わったものがある示唆
				}else{
					array[i] -= time;									//処理したので要素から引く
					time_count += time;									//合計時間には足す
					if(judge_end) {										//終わってるものがあれば
						array[i - end_count_now] = array[i];			//終わってる数だけ前へ
						pro[i - end_count_now] = pro[i];				//マークも一緒に
					}
				}
				continue;
			}
			end_count += end_count_now;									//今回終わった数を出す
		}
	}
} import java.util.Scanner; Scanner java.util class Main {
	public static void main(String args[]) {
		Scanner scanner = new Scanner(System.in);
		int  num = scanner.nextInt();//要素数
		int  time = scanner.nextInt();//要素数
		int[] array = new int[num];
		String[] pro = new String[num];
		
		//配列作り
		for(int i = 0; i < num; i ++ ){
			pro[i] = scanner.next();		//マーク
			array[i] = scanner.nextInt();	//数字
		}
		
		Queue(pro, array,num,time);
		
		scanner.close();
	}

	public static void Queue( String[] pro, int[] array,int num,int time){
		int sub;
		int i;
		int end_count = 0;
		int end_count_now;
		int time_count = 0;
		boolean judge_end = false;
		
		//ラウンドロビンスケジューリング
		while( end_count < num  ){										//全部終わったら終わり
			end_count_now = 0;
			judge_end = false;
			
			for( i = 0; i < num - end_count; i ++ ){
				sub = array[i] - time;
				if(sub <= 0){
					time_count += array[i];								//時間分だけ足す
					System.out.println(pro[i] +  " " + time_count);		//時間内なら出力
					end_count_now ++;									//今回っている中での終わった数
					judge_end = true;									//終わったものがある示唆
				}else{
					array[i] -= time;									//処理したので要素から引く
					time_count += time;									//合計時間には足す
					if(judge_end) {										//終わってるものがあれば
						array[i - end_count_now] = array[i];			//終わってる数だけ前へ
						pro[i - end_count_now] = pro[i];				//マークも一緒に
					}
				}
				continue;
			}
			end_count += end_count_now;									//今回終わった数を出す
		}
	}
} Main public static void main(String args[]) {
		Scanner scanner = new Scanner(System.in);
		int  num = scanner.nextInt();//要素数
		int  time = scanner.nextInt();//要素数
		int[] array = new int[num];
		String[] pro = new String[num];
		
		//配列作り
		for(int i = 0; i < num; i ++ ){
			pro[i] = scanner.next();		//マーク
			array[i] = scanner.nextInt();	//数字
		}
		
		Queue(pro, array,num,time);
		
		scanner.close();
	} main {
		Scanner scanner = new Scanner(System.in);
		int  num = scanner.nextInt();//要素数
		int  time = scanner.nextInt();//要素数
		int[] array = new int[num];
		String[] pro = new String[num];
		
		//配列作り
		for(int i = 0; i < num; i ++ ){
			pro[i] = scanner.next();		//マーク
			array[i] = scanner.nextInt();	//数字
		}
		
		Queue(pro, array,num,time);
		
		scanner.close();
	} Scanner scanner = new Scanner(System.in); scanner new Scanner(System.in) int  num = scanner.nextInt(); num scanner.nextInt() scanner.nextInt scanner int  time = scanner.nextInt(); time scanner.nextInt() scanner.nextInt scanner int[] array = new int[num]; array new int[num] num String[] pro = new String[num]; pro new String[num] num for(int i = 0; i < num; i ++ ){
			pro[i] = scanner.next();		//マーク
			array[i] = scanner.nextInt();	//数字
		} int i = 0; int i = 0; i 0 i < num i num i ++ i ++ i {
			pro[i] = scanner.next();		//マーク
			array[i] = scanner.nextInt();	//数字
		} {
			pro[i] = scanner.next();		//マーク
			array[i] = scanner.nextInt();	//数字
		} pro[i] = scanner.next() pro[i] pro i scanner.next() scanner.next scanner array[i] = scanner.nextInt() array[i] array i scanner.nextInt() scanner.nextInt scanner Queue(pro, array,num,time) Queue pro array num time scanner.close() scanner.close scanner String args[] args public static void Queue( String[] pro, int[] array,int num,int time){
		int sub;
		int i;
		int end_count = 0;
		int end_count_now;
		int time_count = 0;
		boolean judge_end = false;
		
		//ラウンドロビンスケジューリング
		while( end_count < num  ){										//全部終わったら終わり
			end_count_now = 0;
			judge_end = false;
			
			for( i = 0; i < num - end_count; i ++ ){
				sub = array[i] - time;
				if(sub <= 0){
					time_count += array[i];								//時間分だけ足す
					System.out.println(pro[i] +  " " + time_count);		//時間内なら出力
					end_count_now ++;									//今回っている中での終わった数
					judge_end = true;									//終わったものがある示唆
				}else{
					array[i] -= time;									//処理したので要素から引く
					time_count += time;									//合計時間には足す
					if(judge_end) {										//終わってるものがあれば
						array[i - end_count_now] = array[i];			//終わってる数だけ前へ
						pro[i - end_count_now] = pro[i];				//マークも一緒に
					}
				}
				continue;
			}
			end_count += end_count_now;									//今回終わった数を出す
		}
	} Queue {
		int sub;
		int i;
		int end_count = 0;
		int end_count_now;
		int time_count = 0;
		boolean judge_end = false;
		
		//ラウンドロビンスケジューリング
		while( end_count < num  ){										//全部終わったら終わり
			end_count_now = 0;
			judge_end = false;
			
			for( i = 0; i < num - end_count; i ++ ){
				sub = array[i] - time;
				if(sub <= 0){
					time_count += array[i];								//時間分だけ足す
					System.out.println(pro[i] +  " " + time_count);		//時間内なら出力
					end_count_now ++;									//今回っている中での終わった数
					judge_end = true;									//終わったものがある示唆
				}else{
					array[i] -= time;									//処理したので要素から引く
					time_count += time;									//合計時間には足す
					if(judge_end) {										//終わってるものがあれば
						array[i - end_count_now] = array[i];			//終わってる数だけ前へ
						pro[i - end_count_now] = pro[i];				//マークも一緒に
					}
				}
				continue;
			}
			end_count += end_count_now;									//今回終わった数を出す
		}
	} int sub; sub int i; i int end_count = 0; end_count 0 int end_count_now; end_count_now int time_count = 0; time_count 0 boolean judge_end = false; judge_end false while( end_count < num  ){										//全部終わったら終わり
			end_count_now = 0;
			judge_end = false;
			
			for( i = 0; i < num - end_count; i ++ ){
				sub = array[i] - time;
				if(sub <= 0){
					time_count += array[i];								//時間分だけ足す
					System.out.println(pro[i] +  " " + time_count);		//時間内なら出力
					end_count_now ++;									//今回っている中での終わった数
					judge_end = true;									//終わったものがある示唆
				}else{
					array[i] -= time;									//処理したので要素から引く
					time_count += time;									//合計時間には足す
					if(judge_end) {										//終わってるものがあれば
						array[i - end_count_now] = array[i];			//終わってる数だけ前へ
						pro[i - end_count_now] = pro[i];				//マークも一緒に
					}
				}
				continue;
			}
			end_count += end_count_now;									//今回終わった数を出す
		} end_count < num end_count num {										//全部終わったら終わり
			end_count_now = 0;
			judge_end = false;
			
			for( i = 0; i < num - end_count; i ++ ){
				sub = array[i] - time;
				if(sub <= 0){
					time_count += array[i];								//時間分だけ足す
					System.out.println(pro[i] +  " " + time_count);		//時間内なら出力
					end_count_now ++;									//今回っている中での終わった数
					judge_end = true;									//終わったものがある示唆
				}else{
					array[i] -= time;									//処理したので要素から引く
					time_count += time;									//合計時間には足す
					if(judge_end) {										//終わってるものがあれば
						array[i - end_count_now] = array[i];			//終わってる数だけ前へ
						pro[i - end_count_now] = pro[i];				//マークも一緒に
					}
				}
				continue;
			}
			end_count += end_count_now;									//今回終わった数を出す
		} end_count_now = 0 end_count_now 0 judge_end = false judge_end false for( i = 0; i < num - end_count; i ++ ){
				sub = array[i] - time;
				if(sub <= 0){
					time_count += array[i];								//時間分だけ足す
					System.out.println(pro[i] +  " " + time_count);		//時間内なら出力
					end_count_now ++;									//今回っている中での終わった数
					judge_end = true;									//終わったものがある示唆
				}else{
					array[i] -= time;									//処理したので要素から引く
					time_count += time;									//合計時間には足す
					if(judge_end) {										//終わってるものがあれば
						array[i - end_count_now] = array[i];			//終わってる数だけ前へ
						pro[i - end_count_now] = pro[i];				//マークも一緒に
					}
				}
				continue;
			} i = 0; i = 0 i 0 i < num - end_count i num - end_count num end_count i ++ i ++ i {
				sub = array[i] - time;
				if(sub <= 0){
					time_count += array[i];								//時間分だけ足す
					System.out.println(pro[i] +  " " + time_count);		//時間内なら出力
					end_count_now ++;									//今回っている中での終わった数
					judge_end = true;									//終わったものがある示唆
				}else{
					array[i] -= time;									//処理したので要素から引く
					time_count += time;									//合計時間には足す
					if(judge_end) {										//終わってるものがあれば
						array[i - end_count_now] = array[i];			//終わってる数だけ前へ
						pro[i - end_count_now] = pro[i];				//マークも一緒に
					}
				}
				continue;
			} {
				sub = array[i] - time;
				if(sub <= 0){
					time_count += array[i];								//時間分だけ足す
					System.out.println(pro[i] +  " " + time_count);		//時間内なら出力
					end_count_now ++;									//今回っている中での終わった数
					judge_end = true;									//終わったものがある示唆
				}else{
					array[i] -= time;									//処理したので要素から引く
					time_count += time;									//合計時間には足す
					if(judge_end) {										//終わってるものがあれば
						array[i - end_count_now] = array[i];			//終わってる数だけ前へ
						pro[i - end_count_now] = pro[i];				//マークも一緒に
					}
				}
				continue;
			} sub = array[i] - time sub array[i] - time array[i] array i time if(sub <= 0){
					time_count += array[i];								//時間分だけ足す
					System.out.println(pro[i] +  " " + time_count);		//時間内なら出力
					end_count_now ++;									//今回っている中での終わった数
					judge_end = true;									//終わったものがある示唆
				}else{
					array[i] -= time;									//処理したので要素から引く
					time_count += time;									//合計時間には足す
					if(judge_end) {										//終わってるものがあれば
						array[i - end_count_now] = array[i];			//終わってる数だけ前へ
						pro[i - end_count_now] = pro[i];				//マークも一緒に
					}
				} sub <= 0 sub 0 {
					time_count += array[i];								//時間分だけ足す
					System.out.println(pro[i] +  " " + time_count);		//時間内なら出力
					end_count_now ++;									//今回っている中での終わった数
					judge_end = true;									//終わったものがある示唆
				} time_count += array[i] time_count array[i] array i System.out.println(pro[i] +  " " + time_count) System.out.println System.out System System.out pro[i] +  " " + time_count pro[i] +  " " + time_count pro[i] pro i " " time_count end_count_now ++ end_count_now judge_end = true judge_end true {
					array[i] -= time;									//処理したので要素から引く
					time_count += time;									//合計時間には足す
					if(judge_end) {										//終わってるものがあれば
						array[i - end_count_now] = array[i];			//終わってる数だけ前へ
						pro[i - end_count_now] = pro[i];				//マークも一緒に
					}
				} array[i] -= time array[i] array i time time_count += time time_count time if(judge_end) {										//終わってるものがあれば
						array[i - end_count_now] = array[i];			//終わってる数だけ前へ
						pro[i - end_count_now] = pro[i];				//マークも一緒に
					} judge_end {										//終わってるものがあれば
						array[i - end_count_now] = array[i];			//終わってる数だけ前へ
						pro[i - end_count_now] = pro[i];				//マークも一緒に
					} array[i - end_count_now] = array[i] array[i - end_count_now] array i - end_count_now i end_count_now array[i] array i pro[i - end_count_now] = pro[i] pro[i - end_count_now] pro i - end_count_now i end_count_now pro[i] pro i continue; end_count += end_count_now end_count end_count_now String[] pro pro int[] array array int num num int time time
import java.util.Scanner;

class Main {
	public static void main(String args[]) {
		Scanner scanner = new Scanner(System.in);
		int  num = scanner.nextInt();//要素数
		int  time = scanner.nextInt();//要素数
		int[] array = new int[num];
		String[] pro = new String[num];
		
		//配列作り
		for(int i = 0; i < num; i ++ ){
			pro[i] = scanner.next();		//マーク
			array[i] = scanner.nextInt();	//数字
		}
		
		Queue(pro, array,num,time);
		
		scanner.close();
	}

	public static void Queue( String[] pro, int[] array,int num,int time){
		int sub;
		int i;
		int end_count = 0;
		int end_count_now;
		int time_count = 0;
		boolean judge_end = false;
		
		//ラウンドロビンスケジューリング
		while( end_count < num  ){										//全部終わったら終わり
			end_count_now = 0;
			judge_end = false;
			
			for( i = 0; i < num - end_count; i ++ ){
				sub = array[i] - time;
				if(sub <= 0){
					time_count += array[i];								//時間分だけ足す
					System.out.println(pro[i] +  " " + time_count);		//時間内なら出力
					end_count_now ++;									//今回っている中での終わった数
					judge_end = true;									//終わったものがある示唆
				}else{
					array[i] -= time;									//処理したので要素から引く
					time_count += time;									//合計時間には足す
					if(judge_end) {										//終わってるものがあれば
						array[i - end_count_now] = array[i];			//終わってる数だけ前へ
						pro[i - end_count_now] = pro[i];				//マークも一緒に
					}
				}
				continue;
			}
			end_count += end_count_now;									//今回終わった数を出す
		}
	}
}
