import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		
		//標準入力受け取り////////////////////////////////
		String[] nandqueue = scan.nextLine().split(" ");
		int N = Integer.parseInt(nandqueue[0]); //プロセスの数受け取り
		int queue = Integer.parseInt(nandqueue[1]);	 //クオンタム受け取り
		
		String[] nameandtime = new String[2];
		String[] name = new String[N];
		String[] time = new String[N];
		
		for(int i = 0; i < N; i++) {
		nameandtime = scan.nextLine().split(" ");
		name[i] = nameandtime[0];
		time[i] = nameandtime[1];
		//System.out.println(time[i]); //確認用
		}
		//////////////////////////////////////////////////
		
		//queue作成//////////////////////////////
		//時間のdeque@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
		Deque<String> deque1 = new ArrayDeque<>();
		for(int i = 0; i < N; i++) {
			deque1.add(time[i]);
		}
		//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
		//名前のdeque@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
		Deque<String> deque2 = new ArrayDeque<>();
		for(int i = 0; i < N; i++) {
			deque2.add(name[i]);
		}
		//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
		/////////////////////////////////////////
		
		//System.out.println(deque); //確認用
		
		//処理///////////////////////////////////////
		int count = 0; //キューのクリアカウント
		int queuetime = 0; //queueを加算した時間
		for(int i = 0; count < N; i++) {
			int x =Integer.parseInt(deque1.poll());
			String y = deque2.poll();
			x -= queue;
			if(x <= 0) {
				queuetime += (queue + x);
				x = 0;
				count++;
				System.out.println(y + " " + queuetime);
			} else {
				queuetime += queue;
				deque1.add(String.valueOf(x));
				deque2.add(y);
			}
			if(i < deque1.size()) {
				i = 0;
			}
		}
		//////////////////////////////////////////////
	}
}
 import java.util.ArrayDeque; ArrayDeque java.util import java.util.Deque; Deque java.util import java.util.Scanner; Scanner java.util public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		
		//標準入力受け取り////////////////////////////////
		String[] nandqueue = scan.nextLine().split(" ");
		int N = Integer.parseInt(nandqueue[0]); //プロセスの数受け取り
		int queue = Integer.parseInt(nandqueue[1]);	 //クオンタム受け取り
		
		String[] nameandtime = new String[2];
		String[] name = new String[N];
		String[] time = new String[N];
		
		for(int i = 0; i < N; i++) {
		nameandtime = scan.nextLine().split(" ");
		name[i] = nameandtime[0];
		time[i] = nameandtime[1];
		//System.out.println(time[i]); //確認用
		}
		//////////////////////////////////////////////////
		
		//queue作成//////////////////////////////
		//時間のdeque@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
		Deque<String> deque1 = new ArrayDeque<>();
		for(int i = 0; i < N; i++) {
			deque1.add(time[i]);
		}
		//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
		//名前のdeque@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
		Deque<String> deque2 = new ArrayDeque<>();
		for(int i = 0; i < N; i++) {
			deque2.add(name[i]);
		}
		//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
		/////////////////////////////////////////
		
		//System.out.println(deque); //確認用
		
		//処理///////////////////////////////////////
		int count = 0; //キューのクリアカウント
		int queuetime = 0; //queueを加算した時間
		for(int i = 0; count < N; i++) {
			int x =Integer.parseInt(deque1.poll());
			String y = deque2.poll();
			x -= queue;
			if(x <= 0) {
				queuetime += (queue + x);
				x = 0;
				count++;
				System.out.println(y + " " + queuetime);
			} else {
				queuetime += queue;
				deque1.add(String.valueOf(x));
				deque2.add(y);
			}
			if(i < deque1.size()) {
				i = 0;
			}
		}
		//////////////////////////////////////////////
	}
} Main public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		
		//標準入力受け取り////////////////////////////////
		String[] nandqueue = scan.nextLine().split(" ");
		int N = Integer.parseInt(nandqueue[0]); //プロセスの数受け取り
		int queue = Integer.parseInt(nandqueue[1]);	 //クオンタム受け取り
		
		String[] nameandtime = new String[2];
		String[] name = new String[N];
		String[] time = new String[N];
		
		for(int i = 0; i < N; i++) {
		nameandtime = scan.nextLine().split(" ");
		name[i] = nameandtime[0];
		time[i] = nameandtime[1];
		//System.out.println(time[i]); //確認用
		}
		//////////////////////////////////////////////////
		
		//queue作成//////////////////////////////
		//時間のdeque@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
		Deque<String> deque1 = new ArrayDeque<>();
		for(int i = 0; i < N; i++) {
			deque1.add(time[i]);
		}
		//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
		//名前のdeque@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
		Deque<String> deque2 = new ArrayDeque<>();
		for(int i = 0; i < N; i++) {
			deque2.add(name[i]);
		}
		//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
		/////////////////////////////////////////
		
		//System.out.println(deque); //確認用
		
		//処理///////////////////////////////////////
		int count = 0; //キューのクリアカウント
		int queuetime = 0; //queueを加算した時間
		for(int i = 0; count < N; i++) {
			int x =Integer.parseInt(deque1.poll());
			String y = deque2.poll();
			x -= queue;
			if(x <= 0) {
				queuetime += (queue + x);
				x = 0;
				count++;
				System.out.println(y + " " + queuetime);
			} else {
				queuetime += queue;
				deque1.add(String.valueOf(x));
				deque2.add(y);
			}
			if(i < deque1.size()) {
				i = 0;
			}
		}
		//////////////////////////////////////////////
	} main {
		Scanner scan = new Scanner(System.in);
		
		//標準入力受け取り////////////////////////////////
		String[] nandqueue = scan.nextLine().split(" ");
		int N = Integer.parseInt(nandqueue[0]); //プロセスの数受け取り
		int queue = Integer.parseInt(nandqueue[1]);	 //クオンタム受け取り
		
		String[] nameandtime = new String[2];
		String[] name = new String[N];
		String[] time = new String[N];
		
		for(int i = 0; i < N; i++) {
		nameandtime = scan.nextLine().split(" ");
		name[i] = nameandtime[0];
		time[i] = nameandtime[1];
		//System.out.println(time[i]); //確認用
		}
		//////////////////////////////////////////////////
		
		//queue作成//////////////////////////////
		//時間のdeque@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
		Deque<String> deque1 = new ArrayDeque<>();
		for(int i = 0; i < N; i++) {
			deque1.add(time[i]);
		}
		//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
		//名前のdeque@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
		Deque<String> deque2 = new ArrayDeque<>();
		for(int i = 0; i < N; i++) {
			deque2.add(name[i]);
		}
		//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
		/////////////////////////////////////////
		
		//System.out.println(deque); //確認用
		
		//処理///////////////////////////////////////
		int count = 0; //キューのクリアカウント
		int queuetime = 0; //queueを加算した時間
		for(int i = 0; count < N; i++) {
			int x =Integer.parseInt(deque1.poll());
			String y = deque2.poll();
			x -= queue;
			if(x <= 0) {
				queuetime += (queue + x);
				x = 0;
				count++;
				System.out.println(y + " " + queuetime);
			} else {
				queuetime += queue;
				deque1.add(String.valueOf(x));
				deque2.add(y);
			}
			if(i < deque1.size()) {
				i = 0;
			}
		}
		//////////////////////////////////////////////
	} Scanner scan = new Scanner(System.in); scan new Scanner(System.in) String[] nandqueue = scan.nextLine().split(" "); nandqueue scan.nextLine().split(" ") scan.nextLine().split scan.nextLine() scan.nextLine scan " " int N = Integer.parseInt(nandqueue[0]); N Integer.parseInt(nandqueue[0]) Integer.parseInt Integer nandqueue[0] nandqueue 0 int queue = Integer.parseInt(nandqueue[1]); queue Integer.parseInt(nandqueue[1]) Integer.parseInt Integer nandqueue[1] nandqueue 1 String[] nameandtime = new String[2]; nameandtime new String[2] 2 String[] name = new String[N]; name new String[N] N String[] time = new String[N]; time new String[N] N for(int i = 0; i < N; i++) {
		nameandtime = scan.nextLine().split(" ");
		name[i] = nameandtime[0];
		time[i] = nameandtime[1];
		//System.out.println(time[i]); //確認用
		} int i = 0; int i = 0; i 0 i < N i N i++ i++ i {
		nameandtime = scan.nextLine().split(" ");
		name[i] = nameandtime[0];
		time[i] = nameandtime[1];
		//System.out.println(time[i]); //確認用
		} {
		nameandtime = scan.nextLine().split(" ");
		name[i] = nameandtime[0];
		time[i] = nameandtime[1];
		//System.out.println(time[i]); //確認用
		} nameandtime = scan.nextLine().split(" ") nameandtime scan.nextLine().split(" ") scan.nextLine().split scan.nextLine() scan.nextLine scan " " name[i] = nameandtime[0] name[i] name i nameandtime[0] nameandtime 0 time[i] = nameandtime[1] time[i] time i nameandtime[1] nameandtime 1 Deque<String> deque1 = new ArrayDeque<>(); deque1 new ArrayDeque<>() for(int i = 0; i < N; i++) {
			deque1.add(time[i]);
		} int i = 0; int i = 0; i 0 i < N i N i++ i++ i {
			deque1.add(time[i]);
		} {
			deque1.add(time[i]);
		} deque1.add(time[i]) deque1.add deque1 time[i] time i Deque<String> deque2 = new ArrayDeque<>(); deque2 new ArrayDeque<>() for(int i = 0; i < N; i++) {
			deque2.add(name[i]);
		} int i = 0; int i = 0; i 0 i < N i N i++ i++ i {
			deque2.add(name[i]);
		} {
			deque2.add(name[i]);
		} deque2.add(name[i]) deque2.add deque2 name[i] name i int count = 0; count 0 int queuetime = 0; queuetime 0 for(int i = 0; count < N; i++) {
			int x =Integer.parseInt(deque1.poll());
			String y = deque2.poll();
			x -= queue;
			if(x <= 0) {
				queuetime += (queue + x);
				x = 0;
				count++;
				System.out.println(y + " " + queuetime);
			} else {
				queuetime += queue;
				deque1.add(String.valueOf(x));
				deque2.add(y);
			}
			if(i < deque1.size()) {
				i = 0;
			}
		} int i = 0; int i = 0; i 0 count < N count N i++ i++ i {
			int x =Integer.parseInt(deque1.poll());
			String y = deque2.poll();
			x -= queue;
			if(x <= 0) {
				queuetime += (queue + x);
				x = 0;
				count++;
				System.out.println(y + " " + queuetime);
			} else {
				queuetime += queue;
				deque1.add(String.valueOf(x));
				deque2.add(y);
			}
			if(i < deque1.size()) {
				i = 0;
			}
		} {
			int x =Integer.parseInt(deque1.poll());
			String y = deque2.poll();
			x -= queue;
			if(x <= 0) {
				queuetime += (queue + x);
				x = 0;
				count++;
				System.out.println(y + " " + queuetime);
			} else {
				queuetime += queue;
				deque1.add(String.valueOf(x));
				deque2.add(y);
			}
			if(i < deque1.size()) {
				i = 0;
			}
		} int x =Integer.parseInt(deque1.poll()); x Integer.parseInt(deque1.poll()) Integer.parseInt Integer deque1.poll() deque1.poll deque1 String y = deque2.poll(); y deque2.poll() deque2.poll deque2 x -= queue x queue if(x <= 0) {
				queuetime += (queue + x);
				x = 0;
				count++;
				System.out.println(y + " " + queuetime);
			} else {
				queuetime += queue;
				deque1.add(String.valueOf(x));
				deque2.add(y);
			} x <= 0 x 0 {
				queuetime += (queue + x);
				x = 0;
				count++;
				System.out.println(y + " " + queuetime);
			} queuetime += (queue + x) queuetime (queue + x) queue x x = 0 x 0 count++ count System.out.println(y + " " + queuetime) System.out.println System.out System System.out y + " " + queuetime y + " " + queuetime y " " queuetime {
				queuetime += queue;
				deque1.add(String.valueOf(x));
				deque2.add(y);
			} queuetime += queue queuetime queue deque1.add(String.valueOf(x)) deque1.add deque1 String.valueOf(x) String.valueOf String x deque2.add(y) deque2.add deque2 y if(i < deque1.size()) {
				i = 0;
			} i < deque1.size() i deque1.size() deque1.size deque1 {
				i = 0;
			} i = 0 i 0 String[] args args public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		
		//標準入力受け取り////////////////////////////////
		String[] nandqueue = scan.nextLine().split(" ");
		int N = Integer.parseInt(nandqueue[0]); //プロセスの数受け取り
		int queue = Integer.parseInt(nandqueue[1]);	 //クオンタム受け取り
		
		String[] nameandtime = new String[2];
		String[] name = new String[N];
		String[] time = new String[N];
		
		for(int i = 0; i < N; i++) {
		nameandtime = scan.nextLine().split(" ");
		name[i] = nameandtime[0];
		time[i] = nameandtime[1];
		//System.out.println(time[i]); //確認用
		}
		//////////////////////////////////////////////////
		
		//queue作成//////////////////////////////
		//時間のdeque@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
		Deque<String> deque1 = new ArrayDeque<>();
		for(int i = 0; i < N; i++) {
			deque1.add(time[i]);
		}
		//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
		//名前のdeque@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
		Deque<String> deque2 = new ArrayDeque<>();
		for(int i = 0; i < N; i++) {
			deque2.add(name[i]);
		}
		//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
		/////////////////////////////////////////
		
		//System.out.println(deque); //確認用
		
		//処理///////////////////////////////////////
		int count = 0; //キューのクリアカウント
		int queuetime = 0; //queueを加算した時間
		for(int i = 0; count < N; i++) {
			int x =Integer.parseInt(deque1.poll());
			String y = deque2.poll();
			x -= queue;
			if(x <= 0) {
				queuetime += (queue + x);
				x = 0;
				count++;
				System.out.println(y + " " + queuetime);
			} else {
				queuetime += queue;
				deque1.add(String.valueOf(x));
				deque2.add(y);
			}
			if(i < deque1.size()) {
				i = 0;
			}
		}
		//////////////////////////////////////////////
	}
} public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		
		//標準入力受け取り////////////////////////////////
		String[] nandqueue = scan.nextLine().split(" ");
		int N = Integer.parseInt(nandqueue[0]); //プロセスの数受け取り
		int queue = Integer.parseInt(nandqueue[1]);	 //クオンタム受け取り
		
		String[] nameandtime = new String[2];
		String[] name = new String[N];
		String[] time = new String[N];
		
		for(int i = 0; i < N; i++) {
		nameandtime = scan.nextLine().split(" ");
		name[i] = nameandtime[0];
		time[i] = nameandtime[1];
		//System.out.println(time[i]); //確認用
		}
		//////////////////////////////////////////////////
		
		//queue作成//////////////////////////////
		//時間のdeque@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
		Deque<String> deque1 = new ArrayDeque<>();
		for(int i = 0; i < N; i++) {
			deque1.add(time[i]);
		}
		//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
		//名前のdeque@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
		Deque<String> deque2 = new ArrayDeque<>();
		for(int i = 0; i < N; i++) {
			deque2.add(name[i]);
		}
		//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
		/////////////////////////////////////////
		
		//System.out.println(deque); //確認用
		
		//処理///////////////////////////////////////
		int count = 0; //キューのクリアカウント
		int queuetime = 0; //queueを加算した時間
		for(int i = 0; count < N; i++) {
			int x =Integer.parseInt(deque1.poll());
			String y = deque2.poll();
			x -= queue;
			if(x <= 0) {
				queuetime += (queue + x);
				x = 0;
				count++;
				System.out.println(y + " " + queuetime);
			} else {
				queuetime += queue;
				deque1.add(String.valueOf(x));
				deque2.add(y);
			}
			if(i < deque1.size()) {
				i = 0;
			}
		}
		//////////////////////////////////////////////
	}
} Main
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		
		//標準入力受け取り////////////////////////////////
		String[] nandqueue = scan.nextLine().split(" ");
		int N = Integer.parseInt(nandqueue[0]); //プロセスの数受け取り
		int queue = Integer.parseInt(nandqueue[1]);	 //クオンタム受け取り
		
		String[] nameandtime = new String[2];
		String[] name = new String[N];
		String[] time = new String[N];
		
		for(int i = 0; i < N; i++) {
		nameandtime = scan.nextLine().split(" ");
		name[i] = nameandtime[0];
		time[i] = nameandtime[1];
		//System.out.println(time[i]); //確認用
		}
		//////////////////////////////////////////////////
		
		//queue作成//////////////////////////////
		//時間のdeque@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
		Deque<String> deque1 = new ArrayDeque<>();
		for(int i = 0; i < N; i++) {
			deque1.add(time[i]);
		}
		//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
		//名前のdeque@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
		Deque<String> deque2 = new ArrayDeque<>();
		for(int i = 0; i < N; i++) {
			deque2.add(name[i]);
		}
		//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
		/////////////////////////////////////////
		
		//System.out.println(deque); //確認用
		
		//処理///////////////////////////////////////
		int count = 0; //キューのクリアカウント
		int queuetime = 0; //queueを加算した時間
		for(int i = 0; count < N; i++) {
			int x =Integer.parseInt(deque1.poll());
			String y = deque2.poll();
			x -= queue;
			if(x <= 0) {
				queuetime += (queue + x);
				x = 0;
				count++;
				System.out.println(y + " " + queuetime);
			} else {
				queuetime += queue;
				deque1.add(String.valueOf(x));
				deque2.add(y);
			}
			if(i < deque1.size()) {
				i = 0;
			}
		}
		//////////////////////////////////////////////
	}
}

