import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Queue;

public class Main {
	public static void main(String[] args) {

		// Queueはインターフェースなので、実装クラスのArrayDequeで実装
		Queue<Process> queue = new ArrayDeque<>();

		try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in));) {
			String[] str = br.readLine().split(" ");
			int n = Integer.parseInt(str[0]);// プロセス数
			int q = Integer.parseInt(str[1]);// クオンタム

			for (int i = 0; i < n; i++) {
				String[] tmp = br.readLine().split(" ");
				String name = tmp[0];// プロセス名
				int time = Integer.parseInt(tmp[1]);// 処理時間
				// キューに追加
				queue.add(new Process(name, time));
			}

			int total = 0;// 終了時刻
			// peek()メソッドは要素がなくても例外はスローせずnullを返す
			while (queue.peek() != null) {
				// キューから取り出し
				Process curPrcs = queue.remove();
				int curTime = Math.min(q, curPrcs.time);
				total += curTime;
				curPrcs.time -= curTime;
				if (curPrcs.time > 0) {
					// キューに追加
					queue.add(curPrcs);
				} else {
					System.out.println(curPrcs.name + " " + total);
				}

			}


		} catch (IOException e) {
			e.printStackTrace();
		}

	}

}

// プロセスの情報
class Process {
	String name;// プロセス名
	int time;// 処理時間

	public Process(String name, int time) {
		this.time = time;
		this.name = name;

	}

}
 import java.io.BufferedReader; BufferedReader java.io import java.io.IOException; IOException java.io import java.io.InputStreamReader; InputStreamReader java.io import java.util.ArrayDeque; ArrayDeque java.util import java.util.Queue; Queue java.util public class Main {
	public static void main(String[] args) {

		// Queueはインターフェースなので、実装クラスのArrayDequeで実装
		Queue<Process> queue = new ArrayDeque<>();

		try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in));) {
			String[] str = br.readLine().split(" ");
			int n = Integer.parseInt(str[0]);// プロセス数
			int q = Integer.parseInt(str[1]);// クオンタム

			for (int i = 0; i < n; i++) {
				String[] tmp = br.readLine().split(" ");
				String name = tmp[0];// プロセス名
				int time = Integer.parseInt(tmp[1]);// 処理時間
				// キューに追加
				queue.add(new Process(name, time));
			}

			int total = 0;// 終了時刻
			// peek()メソッドは要素がなくても例外はスローせずnullを返す
			while (queue.peek() != null) {
				// キューから取り出し
				Process curPrcs = queue.remove();
				int curTime = Math.min(q, curPrcs.time);
				total += curTime;
				curPrcs.time -= curTime;
				if (curPrcs.time > 0) {
					// キューに追加
					queue.add(curPrcs);
				} else {
					System.out.println(curPrcs.name + " " + total);
				}

			}


		} catch (IOException e) {
			e.printStackTrace();
		}

	}

} Main public static void main(String[] args) {

		// Queueはインターフェースなので、実装クラスのArrayDequeで実装
		Queue<Process> queue = new ArrayDeque<>();

		try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in));) {
			String[] str = br.readLine().split(" ");
			int n = Integer.parseInt(str[0]);// プロセス数
			int q = Integer.parseInt(str[1]);// クオンタム

			for (int i = 0; i < n; i++) {
				String[] tmp = br.readLine().split(" ");
				String name = tmp[0];// プロセス名
				int time = Integer.parseInt(tmp[1]);// 処理時間
				// キューに追加
				queue.add(new Process(name, time));
			}

			int total = 0;// 終了時刻
			// peek()メソッドは要素がなくても例外はスローせずnullを返す
			while (queue.peek() != null) {
				// キューから取り出し
				Process curPrcs = queue.remove();
				int curTime = Math.min(q, curPrcs.time);
				total += curTime;
				curPrcs.time -= curTime;
				if (curPrcs.time > 0) {
					// キューに追加
					queue.add(curPrcs);
				} else {
					System.out.println(curPrcs.name + " " + total);
				}

			}


		} catch (IOException e) {
			e.printStackTrace();
		}

	} main {

		// Queueはインターフェースなので、実装クラスのArrayDequeで実装
		Queue<Process> queue = new ArrayDeque<>();

		try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in));) {
			String[] str = br.readLine().split(" ");
			int n = Integer.parseInt(str[0]);// プロセス数
			int q = Integer.parseInt(str[1]);// クオンタム

			for (int i = 0; i < n; i++) {
				String[] tmp = br.readLine().split(" ");
				String name = tmp[0];// プロセス名
				int time = Integer.parseInt(tmp[1]);// 処理時間
				// キューに追加
				queue.add(new Process(name, time));
			}

			int total = 0;// 終了時刻
			// peek()メソッドは要素がなくても例外はスローせずnullを返す
			while (queue.peek() != null) {
				// キューから取り出し
				Process curPrcs = queue.remove();
				int curTime = Math.min(q, curPrcs.time);
				total += curTime;
				curPrcs.time -= curTime;
				if (curPrcs.time > 0) {
					// キューに追加
					queue.add(curPrcs);
				} else {
					System.out.println(curPrcs.name + " " + total);
				}

			}


		} catch (IOException e) {
			e.printStackTrace();
		}

	} Queue<Process> queue = new ArrayDeque<>(); queue new ArrayDeque<>() try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in));) {
			String[] str = br.readLine().split(" ");
			int n = Integer.parseInt(str[0]);// プロセス数
			int q = Integer.parseInt(str[1]);// クオンタム

			for (int i = 0; i < n; i++) {
				String[] tmp = br.readLine().split(" ");
				String name = tmp[0];// プロセス名
				int time = Integer.parseInt(tmp[1]);// 処理時間
				// キューに追加
				queue.add(new Process(name, time));
			}

			int total = 0;// 終了時刻
			// peek()メソッドは要素がなくても例外はスローせずnullを返す
			while (queue.peek() != null) {
				// キューから取り出し
				Process curPrcs = queue.remove();
				int curTime = Math.min(q, curPrcs.time);
				total += curTime;
				curPrcs.time -= curTime;
				if (curPrcs.time > 0) {
					// キューに追加
					queue.add(curPrcs);
				} else {
					System.out.println(curPrcs.name + " " + total);
				}

			}


		} catch (IOException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} IOException e {
			e.printStackTrace();
		} e.printStackTrace() e.printStackTrace e {
			String[] str = br.readLine().split(" ");
			int n = Integer.parseInt(str[0]);// プロセス数
			int q = Integer.parseInt(str[1]);// クオンタム

			for (int i = 0; i < n; i++) {
				String[] tmp = br.readLine().split(" ");
				String name = tmp[0];// プロセス名
				int time = Integer.parseInt(tmp[1]);// 処理時間
				// キューに追加
				queue.add(new Process(name, time));
			}

			int total = 0;// 終了時刻
			// peek()メソッドは要素がなくても例外はスローせずnullを返す
			while (queue.peek() != null) {
				// キューから取り出し
				Process curPrcs = queue.remove();
				int curTime = Math.min(q, curPrcs.time);
				total += curTime;
				curPrcs.time -= curTime;
				if (curPrcs.time > 0) {
					// キューに追加
					queue.add(curPrcs);
				} else {
					System.out.println(curPrcs.name + " " + total);
				}

			}


		} BufferedReader br = new BufferedReader(new InputStreamReader(System.in)) BufferedReader br = new BufferedReader(new InputStreamReader(System.in)) new BufferedReader(new InputStreamReader(System.in)) String[] str = br.readLine().split(" "); str br.readLine().split(" ") br.readLine().split br.readLine() br.readLine br " " int n = Integer.parseInt(str[0]); n Integer.parseInt(str[0]) Integer.parseInt Integer str[0] str 0 int q = Integer.parseInt(str[1]); q Integer.parseInt(str[1]) Integer.parseInt Integer str[1] str 1 for (int i = 0; i < n; i++) {
				String[] tmp = br.readLine().split(" ");
				String name = tmp[0];// プロセス名
				int time = Integer.parseInt(tmp[1]);// 処理時間
				// キューに追加
				queue.add(new Process(name, time));
			} int i = 0; int i = 0; i 0 i < n i n i++ i++ i {
				String[] tmp = br.readLine().split(" ");
				String name = tmp[0];// プロセス名
				int time = Integer.parseInt(tmp[1]);// 処理時間
				// キューに追加
				queue.add(new Process(name, time));
			} {
				String[] tmp = br.readLine().split(" ");
				String name = tmp[0];// プロセス名
				int time = Integer.parseInt(tmp[1]);// 処理時間
				// キューに追加
				queue.add(new Process(name, time));
			} String[] tmp = br.readLine().split(" "); tmp br.readLine().split(" ") br.readLine().split br.readLine() br.readLine br " " String name = tmp[0]; name tmp[0] tmp 0 int time = Integer.parseInt(tmp[1]); time Integer.parseInt(tmp[1]) Integer.parseInt Integer tmp[1] tmp 1 queue.add(new Process(name, time)) queue.add queue new Process(name, time) int total = 0; total 0 while (queue.peek() != null) {
				// キューから取り出し
				Process curPrcs = queue.remove();
				int curTime = Math.min(q, curPrcs.time);
				total += curTime;
				curPrcs.time -= curTime;
				if (curPrcs.time > 0) {
					// キューに追加
					queue.add(curPrcs);
				} else {
					System.out.println(curPrcs.name + " " + total);
				}

			} queue.peek() != null queue.peek() queue.peek queue null {
				// キューから取り出し
				Process curPrcs = queue.remove();
				int curTime = Math.min(q, curPrcs.time);
				total += curTime;
				curPrcs.time -= curTime;
				if (curPrcs.time > 0) {
					// キューに追加
					queue.add(curPrcs);
				} else {
					System.out.println(curPrcs.name + " " + total);
				}

			} Process curPrcs = queue.remove(); curPrcs queue.remove() queue.remove queue int curTime = Math.min(q, curPrcs.time); curTime Math.min(q, curPrcs.time) Math.min Math q curPrcs.time curPrcs curPrcs.time total += curTime total curTime curPrcs.time -= curTime curPrcs.time curPrcs curPrcs.time curTime if (curPrcs.time > 0) {
					// キューに追加
					queue.add(curPrcs);
				} else {
					System.out.println(curPrcs.name + " " + total);
				} curPrcs.time > 0 curPrcs.time curPrcs curPrcs.time 0 {
					// キューに追加
					queue.add(curPrcs);
				} queue.add(curPrcs) queue.add queue curPrcs {
					System.out.println(curPrcs.name + " " + total);
				} System.out.println(curPrcs.name + " " + total) System.out.println System.out System System.out curPrcs.name + " " + total curPrcs.name + " " + total curPrcs.name curPrcs curPrcs.name " " total String[] args args class Process {
	String name;// プロセス名
	int time;// 処理時間

	public Process(String name, int time) {
		this.time = time;
		this.name = name;

	}

} Process String name;// プロセス名 name int time;// 処理時間 time public Process(String name, int time) {
		this.time = time;
		this.name = name;

	} Process {
		this.time = time;
		this.name = name;

	} this.time = time this.time this this.time time this.name = name this.name this this.name name String name name int time time public class Main {
	public static void main(String[] args) {

		// Queueはインターフェースなので、実装クラスのArrayDequeで実装
		Queue<Process> queue = new ArrayDeque<>();

		try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in));) {
			String[] str = br.readLine().split(" ");
			int n = Integer.parseInt(str[0]);// プロセス数
			int q = Integer.parseInt(str[1]);// クオンタム

			for (int i = 0; i < n; i++) {
				String[] tmp = br.readLine().split(" ");
				String name = tmp[0];// プロセス名
				int time = Integer.parseInt(tmp[1]);// 処理時間
				// キューに追加
				queue.add(new Process(name, time));
			}

			int total = 0;// 終了時刻
			// peek()メソッドは要素がなくても例外はスローせずnullを返す
			while (queue.peek() != null) {
				// キューから取り出し
				Process curPrcs = queue.remove();
				int curTime = Math.min(q, curPrcs.time);
				total += curTime;
				curPrcs.time -= curTime;
				if (curPrcs.time > 0) {
					// キューに追加
					queue.add(curPrcs);
				} else {
					System.out.println(curPrcs.name + " " + total);
				}

			}


		} catch (IOException e) {
			e.printStackTrace();
		}

	}

} public class Main {
	public static void main(String[] args) {

		// Queueはインターフェースなので、実装クラスのArrayDequeで実装
		Queue<Process> queue = new ArrayDeque<>();

		try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in));) {
			String[] str = br.readLine().split(" ");
			int n = Integer.parseInt(str[0]);// プロセス数
			int q = Integer.parseInt(str[1]);// クオンタム

			for (int i = 0; i < n; i++) {
				String[] tmp = br.readLine().split(" ");
				String name = tmp[0];// プロセス名
				int time = Integer.parseInt(tmp[1]);// 処理時間
				// キューに追加
				queue.add(new Process(name, time));
			}

			int total = 0;// 終了時刻
			// peek()メソッドは要素がなくても例外はスローせずnullを返す
			while (queue.peek() != null) {
				// キューから取り出し
				Process curPrcs = queue.remove();
				int curTime = Math.min(q, curPrcs.time);
				total += curTime;
				curPrcs.time -= curTime;
				if (curPrcs.time > 0) {
					// キューに追加
					queue.add(curPrcs);
				} else {
					System.out.println(curPrcs.name + " " + total);
				}

			}


		} catch (IOException e) {
			e.printStackTrace();
		}

	}

} Main
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Queue;

public class Main {
	public static void main(String[] args) {

		// Queueはインターフェースなので、実装クラスのArrayDequeで実装
		Queue<Process> queue = new ArrayDeque<>();

		try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in));) {
			String[] str = br.readLine().split(" ");
			int n = Integer.parseInt(str[0]);// プロセス数
			int q = Integer.parseInt(str[1]);// クオンタム

			for (int i = 0; i < n; i++) {
				String[] tmp = br.readLine().split(" ");
				String name = tmp[0];// プロセス名
				int time = Integer.parseInt(tmp[1]);// 処理時間
				// キューに追加
				queue.add(new Process(name, time));
			}

			int total = 0;// 終了時刻
			// peek()メソッドは要素がなくても例外はスローせずnullを返す
			while (queue.peek() != null) {
				// キューから取り出し
				Process curPrcs = queue.remove();
				int curTime = Math.min(q, curPrcs.time);
				total += curTime;
				curPrcs.time -= curTime;
				if (curPrcs.time > 0) {
					// キューに追加
					queue.add(curPrcs);
				} else {
					System.out.println(curPrcs.name + " " + total);
				}

			}


		} catch (IOException e) {
			e.printStackTrace();
		}

	}

}

// プロセスの情報
class Process {
	String name;// プロセス名
	int time;// 処理時間

	public Process(String name, int time) {
		this.time = time;
		this.name = name;

	}

}

