import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
	public static final int BIG_NUM = 2000000000;
	public static final int MOD = 1000000007;

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		final int size = 100005;
		
		try {
			String[] input_str = br.readLine().split("\\s+");
			int n = Integer.parseInt(input_str[0]);
			int q = Integer.parseInt(input_str[1]);
			int elapse = 0;
			Queue queue = new Queue(size);
			StringBuilder ans = new StringBuilder();
			
			for(int i=0; i<n; i++) {
				input_str = br.readLine().split("\\s+");
				queue.push(new Process(input_str[0], Integer.parseInt(input_str[1])));
			}
			
			while(!queue.isEmpty()) {
				Process tmp = queue.pop();
				if(tmp.getTime() <= q) {
					elapse += tmp.getTime();
					ans.append(tmp.getName()).append(" ").append(Integer.toString(elapse)).append("\n");
				} else {
					elapse += q;
					tmp.setTime(tmp.getTime() - q);
					queue.push(tmp);
				}
			}
			System.out.print(ans.toString());
		} catch (NumberFormatException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		} catch (IOException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		}
	}
}

class Process{
	private String name;
	private int t;
	
	Process(String arg_name, int arg_time){
		name = arg_name;
		t = arg_time;
	}
	
	public String getName() {
		return name;
	}
	
	public int getTime() {
		return t;
	}
	
	public void setTime(int arg_time) {
		t = arg_time;
	}
}

class Queue{
	private Process[] table;
	private int head, tail, size;
	
	Queue(int arg_size) {
		size = arg_size;
		table = new Process[size];
		head = 0;
		tail = 0;
	}
	
	boolean isEmpty() {
		return head == tail;
	}
	
	void push(Process process) {
		table[tail] = process;
		tail = (tail+1)%size;
	}
	
	public Process pop() {
		head = (head+1)%size;
		return table[(head-1+size)%size];
	}
} import java.io.BufferedReader; BufferedReader java.io import java.io.IOException; IOException java.io import java.io.InputStreamReader; InputStreamReader java.io public class Main {
	public static final int BIG_NUM = 2000000000;
	public static final int MOD = 1000000007;

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		final int size = 100005;
		
		try {
			String[] input_str = br.readLine().split("\\s+");
			int n = Integer.parseInt(input_str[0]);
			int q = Integer.parseInt(input_str[1]);
			int elapse = 0;
			Queue queue = new Queue(size);
			StringBuilder ans = new StringBuilder();
			
			for(int i=0; i<n; i++) {
				input_str = br.readLine().split("\\s+");
				queue.push(new Process(input_str[0], Integer.parseInt(input_str[1])));
			}
			
			while(!queue.isEmpty()) {
				Process tmp = queue.pop();
				if(tmp.getTime() <= q) {
					elapse += tmp.getTime();
					ans.append(tmp.getName()).append(" ").append(Integer.toString(elapse)).append("\n");
				} else {
					elapse += q;
					tmp.setTime(tmp.getTime() - q);
					queue.push(tmp);
				}
			}
			System.out.print(ans.toString());
		} catch (NumberFormatException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		} catch (IOException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		}
	}
} Main public static final int BIG_NUM = 2000000000; BIG_NUM 2000000000 public static final int MOD = 1000000007; MOD 1000000007 public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		final int size = 100005;
		
		try {
			String[] input_str = br.readLine().split("\\s+");
			int n = Integer.parseInt(input_str[0]);
			int q = Integer.parseInt(input_str[1]);
			int elapse = 0;
			Queue queue = new Queue(size);
			StringBuilder ans = new StringBuilder();
			
			for(int i=0; i<n; i++) {
				input_str = br.readLine().split("\\s+");
				queue.push(new Process(input_str[0], Integer.parseInt(input_str[1])));
			}
			
			while(!queue.isEmpty()) {
				Process tmp = queue.pop();
				if(tmp.getTime() <= q) {
					elapse += tmp.getTime();
					ans.append(tmp.getName()).append(" ").append(Integer.toString(elapse)).append("\n");
				} else {
					elapse += q;
					tmp.setTime(tmp.getTime() - q);
					queue.push(tmp);
				}
			}
			System.out.print(ans.toString());
		} catch (NumberFormatException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		} catch (IOException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		}
	} main {
		// TODO 自動生成されたメソッド・スタブ
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		final int size = 100005;
		
		try {
			String[] input_str = br.readLine().split("\\s+");
			int n = Integer.parseInt(input_str[0]);
			int q = Integer.parseInt(input_str[1]);
			int elapse = 0;
			Queue queue = new Queue(size);
			StringBuilder ans = new StringBuilder();
			
			for(int i=0; i<n; i++) {
				input_str = br.readLine().split("\\s+");
				queue.push(new Process(input_str[0], Integer.parseInt(input_str[1])));
			}
			
			while(!queue.isEmpty()) {
				Process tmp = queue.pop();
				if(tmp.getTime() <= q) {
					elapse += tmp.getTime();
					ans.append(tmp.getName()).append(" ").append(Integer.toString(elapse)).append("\n");
				} else {
					elapse += q;
					tmp.setTime(tmp.getTime() - q);
					queue.push(tmp);
				}
			}
			System.out.print(ans.toString());
		} catch (NumberFormatException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		} catch (IOException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		}
	} BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); br new BufferedReader(new InputStreamReader(System.in)) final int size = 100005; size 100005 try {
			String[] input_str = br.readLine().split("\\s+");
			int n = Integer.parseInt(input_str[0]);
			int q = Integer.parseInt(input_str[1]);
			int elapse = 0;
			Queue queue = new Queue(size);
			StringBuilder ans = new StringBuilder();
			
			for(int i=0; i<n; i++) {
				input_str = br.readLine().split("\\s+");
				queue.push(new Process(input_str[0], Integer.parseInt(input_str[1])));
			}
			
			while(!queue.isEmpty()) {
				Process tmp = queue.pop();
				if(tmp.getTime() <= q) {
					elapse += tmp.getTime();
					ans.append(tmp.getName()).append(" ").append(Integer.toString(elapse)).append("\n");
				} else {
					elapse += q;
					tmp.setTime(tmp.getTime() - q);
					queue.push(tmp);
				}
			}
			System.out.print(ans.toString());
		} catch (NumberFormatException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		} catch (IOException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		} catch (NumberFormatException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		} NumberFormatException e {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		} e.printStackTrace() e.printStackTrace e catch (IOException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		} IOException e {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		} e.printStackTrace() e.printStackTrace e {
			String[] input_str = br.readLine().split("\\s+");
			int n = Integer.parseInt(input_str[0]);
			int q = Integer.parseInt(input_str[1]);
			int elapse = 0;
			Queue queue = new Queue(size);
			StringBuilder ans = new StringBuilder();
			
			for(int i=0; i<n; i++) {
				input_str = br.readLine().split("\\s+");
				queue.push(new Process(input_str[0], Integer.parseInt(input_str[1])));
			}
			
			while(!queue.isEmpty()) {
				Process tmp = queue.pop();
				if(tmp.getTime() <= q) {
					elapse += tmp.getTime();
					ans.append(tmp.getName()).append(" ").append(Integer.toString(elapse)).append("\n");
				} else {
					elapse += q;
					tmp.setTime(tmp.getTime() - q);
					queue.push(tmp);
				}
			}
			System.out.print(ans.toString());
		} String[] input_str = br.readLine().split("\\s+"); input_str br.readLine().split("\\s+") br.readLine().split br.readLine() br.readLine br "\\s+" int n = Integer.parseInt(input_str[0]); n Integer.parseInt(input_str[0]) Integer.parseInt Integer input_str[0] input_str 0 int q = Integer.parseInt(input_str[1]); q Integer.parseInt(input_str[1]) Integer.parseInt Integer input_str[1] input_str 1 int elapse = 0; elapse 0 Queue queue = new Queue(size); queue new Queue(size) StringBuilder ans = new StringBuilder(); ans new StringBuilder() for(int i=0; i<n; i++) {
				input_str = br.readLine().split("\\s+");
				queue.push(new Process(input_str[0], Integer.parseInt(input_str[1])));
			} int i=0; int i=0; i 0 i<n i n i++ i++ i {
				input_str = br.readLine().split("\\s+");
				queue.push(new Process(input_str[0], Integer.parseInt(input_str[1])));
			} {
				input_str = br.readLine().split("\\s+");
				queue.push(new Process(input_str[0], Integer.parseInt(input_str[1])));
			} input_str = br.readLine().split("\\s+") input_str br.readLine().split("\\s+") br.readLine().split br.readLine() br.readLine br "\\s+" queue.push(new Process(input_str[0], Integer.parseInt(input_str[1]))) queue.push queue new Process(input_str[0], Integer.parseInt(input_str[1])) while(!queue.isEmpty()) {
				Process tmp = queue.pop();
				if(tmp.getTime() <= q) {
					elapse += tmp.getTime();
					ans.append(tmp.getName()).append(" ").append(Integer.toString(elapse)).append("\n");
				} else {
					elapse += q;
					tmp.setTime(tmp.getTime() - q);
					queue.push(tmp);
				}
			} !queue.isEmpty() queue.isEmpty() queue.isEmpty queue {
				Process tmp = queue.pop();
				if(tmp.getTime() <= q) {
					elapse += tmp.getTime();
					ans.append(tmp.getName()).append(" ").append(Integer.toString(elapse)).append("\n");
				} else {
					elapse += q;
					tmp.setTime(tmp.getTime() - q);
					queue.push(tmp);
				}
			} Process tmp = queue.pop(); tmp queue.pop() queue.pop queue if(tmp.getTime() <= q) {
					elapse += tmp.getTime();
					ans.append(tmp.getName()).append(" ").append(Integer.toString(elapse)).append("\n");
				} else {
					elapse += q;
					tmp.setTime(tmp.getTime() - q);
					queue.push(tmp);
				} tmp.getTime() <= q tmp.getTime() tmp.getTime tmp q {
					elapse += tmp.getTime();
					ans.append(tmp.getName()).append(" ").append(Integer.toString(elapse)).append("\n");
				} elapse += tmp.getTime() elapse tmp.getTime() tmp.getTime tmp ans.append(tmp.getName()).append(" ").append(Integer.toString(elapse)).append("\n") ans.append(tmp.getName()).append(" ").append(Integer.toString(elapse)).append ans.append(tmp.getName()).append(" ").append(Integer.toString(elapse)) ans.append(tmp.getName()).append(" ").append ans.append(tmp.getName()).append(" ") ans.append(tmp.getName()).append ans.append(tmp.getName()) ans.append ans tmp.getName() tmp.getName tmp " " Integer.toString(elapse) Integer.toString Integer elapse "\n" {
					elapse += q;
					tmp.setTime(tmp.getTime() - q);
					queue.push(tmp);
				} elapse += q elapse q tmp.setTime(tmp.getTime() - q) tmp.setTime tmp tmp.getTime() - q tmp.getTime() tmp.getTime tmp q queue.push(tmp) queue.push queue tmp System.out.print(ans.toString()) System.out.print System.out System System.out ans.toString() ans.toString ans String[] args args class Process{
	private String name;
	private int t;
	
	Process(String arg_name, int arg_time){
		name = arg_name;
		t = arg_time;
	}
	
	public String getName() {
		return name;
	}
	
	public int getTime() {
		return t;
	}
	
	public void setTime(int arg_time) {
		t = arg_time;
	}
} Process private String name; name private int t; t Process(String arg_name, int arg_time){
		name = arg_name;
		t = arg_time;
	} Process {
		name = arg_name;
		t = arg_time;
	} name = arg_name name arg_name t = arg_time t arg_time String arg_name arg_name int arg_time arg_time public String getName() {
		return name;
	} getName {
		return name;
	} return name; name public int getTime() {
		return t;
	} getTime {
		return t;
	} return t; t public void setTime(int arg_time) {
		t = arg_time;
	} setTime {
		t = arg_time;
	} t = arg_time t arg_time int arg_time arg_time class Queue{
	private Process[] table;
	private int head, tail, size;
	
	Queue(int arg_size) {
		size = arg_size;
		table = new Process[size];
		head = 0;
		tail = 0;
	}
	
	boolean isEmpty() {
		return head == tail;
	}
	
	void push(Process process) {
		table[tail] = process;
		tail = (tail+1)%size;
	}
	
	public Process pop() {
		head = (head+1)%size;
		return table[(head-1+size)%size];
	}
} Queue private Process[] table; table private int head head tail tail size; size Queue(int arg_size) {
		size = arg_size;
		table = new Process[size];
		head = 0;
		tail = 0;
	} Queue {
		size = arg_size;
		table = new Process[size];
		head = 0;
		tail = 0;
	} size = arg_size size arg_size table = new Process[size] table new Process[size] size head = 0 head 0 tail = 0 tail 0 int arg_size arg_size boolean isEmpty() {
		return head == tail;
	} isEmpty {
		return head == tail;
	} return head == tail; head == tail head tail void push(Process process) {
		table[tail] = process;
		tail = (tail+1)%size;
	} push {
		table[tail] = process;
		tail = (tail+1)%size;
	} table[tail] = process table[tail] table tail process tail = (tail+1)%size tail (tail+1)%size (tail+1) tail 1 size Process process process public Process pop() {
		head = (head+1)%size;
		return table[(head-1+size)%size];
	} pop {
		head = (head+1)%size;
		return table[(head-1+size)%size];
	} head = (head+1)%size head (head+1)%size (head+1) head 1 size return table[(head-1+size)%size]; table[(head-1+size)%size] table (head-1+size)%size (head-1+size) head-1 head 1 size size public class Main {
	public static final int BIG_NUM = 2000000000;
	public static final int MOD = 1000000007;

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		final int size = 100005;
		
		try {
			String[] input_str = br.readLine().split("\\s+");
			int n = Integer.parseInt(input_str[0]);
			int q = Integer.parseInt(input_str[1]);
			int elapse = 0;
			Queue queue = new Queue(size);
			StringBuilder ans = new StringBuilder();
			
			for(int i=0; i<n; i++) {
				input_str = br.readLine().split("\\s+");
				queue.push(new Process(input_str[0], Integer.parseInt(input_str[1])));
			}
			
			while(!queue.isEmpty()) {
				Process tmp = queue.pop();
				if(tmp.getTime() <= q) {
					elapse += tmp.getTime();
					ans.append(tmp.getName()).append(" ").append(Integer.toString(elapse)).append("\n");
				} else {
					elapse += q;
					tmp.setTime(tmp.getTime() - q);
					queue.push(tmp);
				}
			}
			System.out.print(ans.toString());
		} catch (NumberFormatException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		} catch (IOException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		}
	}
} public class Main {
	public static final int BIG_NUM = 2000000000;
	public static final int MOD = 1000000007;

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		final int size = 100005;
		
		try {
			String[] input_str = br.readLine().split("\\s+");
			int n = Integer.parseInt(input_str[0]);
			int q = Integer.parseInt(input_str[1]);
			int elapse = 0;
			Queue queue = new Queue(size);
			StringBuilder ans = new StringBuilder();
			
			for(int i=0; i<n; i++) {
				input_str = br.readLine().split("\\s+");
				queue.push(new Process(input_str[0], Integer.parseInt(input_str[1])));
			}
			
			while(!queue.isEmpty()) {
				Process tmp = queue.pop();
				if(tmp.getTime() <= q) {
					elapse += tmp.getTime();
					ans.append(tmp.getName()).append(" ").append(Integer.toString(elapse)).append("\n");
				} else {
					elapse += q;
					tmp.setTime(tmp.getTime() - q);
					queue.push(tmp);
				}
			}
			System.out.print(ans.toString());
		} catch (NumberFormatException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		} catch (IOException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		}
	}
} Main
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
	public static final int BIG_NUM = 2000000000;
	public static final int MOD = 1000000007;

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		final int size = 100005;
		
		try {
			String[] input_str = br.readLine().split("\\s+");
			int n = Integer.parseInt(input_str[0]);
			int q = Integer.parseInt(input_str[1]);
			int elapse = 0;
			Queue queue = new Queue(size);
			StringBuilder ans = new StringBuilder();
			
			for(int i=0; i<n; i++) {
				input_str = br.readLine().split("\\s+");
				queue.push(new Process(input_str[0], Integer.parseInt(input_str[1])));
			}
			
			while(!queue.isEmpty()) {
				Process tmp = queue.pop();
				if(tmp.getTime() <= q) {
					elapse += tmp.getTime();
					ans.append(tmp.getName()).append(" ").append(Integer.toString(elapse)).append("\n");
				} else {
					elapse += q;
					tmp.setTime(tmp.getTime() - q);
					queue.push(tmp);
				}
			}
			System.out.print(ans.toString());
		} catch (NumberFormatException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		} catch (IOException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		}
	}
}

class Process{
	private String name;
	private int t;
	
	Process(String arg_name, int arg_time){
		name = arg_name;
		t = arg_time;
	}
	
	public String getName() {
		return name;
	}
	
	public int getTime() {
		return t;
	}
	
	public void setTime(int arg_time) {
		t = arg_time;
	}
}

class Queue{
	private Process[] table;
	private int head, tail, size;
	
	Queue(int arg_size) {
		size = arg_size;
		table = new Process[size];
		head = 0;
		tail = 0;
	}
	
	boolean isEmpty() {
		return head == tail;
	}
	
	void push(Process process) {
		table[tail] = process;
		tail = (tail+1)%size;
	}
	
	public Process pop() {
		head = (head+1)%size;
		return table[(head-1+size)%size];
	}
}
