import java.util.*;

class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();   //プロセス数
        int q = sc.nextInt();   //クオンタム
        int R_time = 0;   //実時間

        ArrayDeque<Proc> queue = new ArrayDeque<>();    //キュー
        Proc tmp;

        for(int i = 0;i < n;i++){
            String name = sc.next();    //プロセス名
            int P_time = sc.nextInt();    //プロセス時間
            queue.add(new Proc(name,P_time));
        }

        while(queue.size() > 0){
            //クオンタム以下
            if(queue.getFirst().num <= q){
                R_time += queue.getFirst().num;
                System.out.println(queue.getFirst().name+" "+R_time);
                queue.removeFirst();
            }
            else{
                R_time += q;
                tmp = queue.getFirst(); //先頭をコピー
                tmp.num -= q;   //プロセス時間からクオンタムを引く
                queue.addLast(tmp); //先頭を末尾に
                queue.removeFirst();    //先頭削除
            }
        }
    }
}

class Proc{
    String name;
    int num;

    Proc(String name,int num){
        this.name = name;
        this.num = num;
    }
} import java.util.*; util.* java class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();   //プロセス数
        int q = sc.nextInt();   //クオンタム
        int R_time = 0;   //実時間

        ArrayDeque<Proc> queue = new ArrayDeque<>();    //キュー
        Proc tmp;

        for(int i = 0;i < n;i++){
            String name = sc.next();    //プロセス名
            int P_time = sc.nextInt();    //プロセス時間
            queue.add(new Proc(name,P_time));
        }

        while(queue.size() > 0){
            //クオンタム以下
            if(queue.getFirst().num <= q){
                R_time += queue.getFirst().num;
                System.out.println(queue.getFirst().name+" "+R_time);
                queue.removeFirst();
            }
            else{
                R_time += q;
                tmp = queue.getFirst(); //先頭をコピー
                tmp.num -= q;   //プロセス時間からクオンタムを引く
                queue.addLast(tmp); //先頭を末尾に
                queue.removeFirst();    //先頭削除
            }
        }
    }
} Main public static void main(String[] args){
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();   //プロセス数
        int q = sc.nextInt();   //クオンタム
        int R_time = 0;   //実時間

        ArrayDeque<Proc> queue = new ArrayDeque<>();    //キュー
        Proc tmp;

        for(int i = 0;i < n;i++){
            String name = sc.next();    //プロセス名
            int P_time = sc.nextInt();    //プロセス時間
            queue.add(new Proc(name,P_time));
        }

        while(queue.size() > 0){
            //クオンタム以下
            if(queue.getFirst().num <= q){
                R_time += queue.getFirst().num;
                System.out.println(queue.getFirst().name+" "+R_time);
                queue.removeFirst();
            }
            else{
                R_time += q;
                tmp = queue.getFirst(); //先頭をコピー
                tmp.num -= q;   //プロセス時間からクオンタムを引く
                queue.addLast(tmp); //先頭を末尾に
                queue.removeFirst();    //先頭削除
            }
        }
    } main {
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();   //プロセス数
        int q = sc.nextInt();   //クオンタム
        int R_time = 0;   //実時間

        ArrayDeque<Proc> queue = new ArrayDeque<>();    //キュー
        Proc tmp;

        for(int i = 0;i < n;i++){
            String name = sc.next();    //プロセス名
            int P_time = sc.nextInt();    //プロセス時間
            queue.add(new Proc(name,P_time));
        }

        while(queue.size() > 0){
            //クオンタム以下
            if(queue.getFirst().num <= q){
                R_time += queue.getFirst().num;
                System.out.println(queue.getFirst().name+" "+R_time);
                queue.removeFirst();
            }
            else{
                R_time += q;
                tmp = queue.getFirst(); //先頭をコピー
                tmp.num -= q;   //プロセス時間からクオンタムを引く
                queue.addLast(tmp); //先頭を末尾に
                queue.removeFirst();    //先頭削除
            }
        }
    } Scanner sc = new Scanner(System.in); sc new Scanner(System.in) int n = sc.nextInt(); n sc.nextInt() sc.nextInt sc int q = sc.nextInt(); q sc.nextInt() sc.nextInt sc int R_time = 0; R_time 0 ArrayDeque<Proc> queue = new ArrayDeque<>(); queue new ArrayDeque<>() Proc tmp; tmp for(int i = 0;i < n;i++){
            String name = sc.next();    //プロセス名
            int P_time = sc.nextInt();    //プロセス時間
            queue.add(new Proc(name,P_time));
        } int i = 0; int i = 0; i 0 i < n i n i++ i++ i {
            String name = sc.next();    //プロセス名
            int P_time = sc.nextInt();    //プロセス時間
            queue.add(new Proc(name,P_time));
        } {
            String name = sc.next();    //プロセス名
            int P_time = sc.nextInt();    //プロセス時間
            queue.add(new Proc(name,P_time));
        } String name = sc.next(); name sc.next() sc.next sc int P_time = sc.nextInt(); P_time sc.nextInt() sc.nextInt sc queue.add(new Proc(name,P_time)) queue.add queue new Proc(name,P_time) while(queue.size() > 0){
            //クオンタム以下
            if(queue.getFirst().num <= q){
                R_time += queue.getFirst().num;
                System.out.println(queue.getFirst().name+" "+R_time);
                queue.removeFirst();
            }
            else{
                R_time += q;
                tmp = queue.getFirst(); //先頭をコピー
                tmp.num -= q;   //プロセス時間からクオンタムを引く
                queue.addLast(tmp); //先頭を末尾に
                queue.removeFirst();    //先頭削除
            }
        } queue.size() > 0 queue.size() queue.size queue 0 {
            //クオンタム以下
            if(queue.getFirst().num <= q){
                R_time += queue.getFirst().num;
                System.out.println(queue.getFirst().name+" "+R_time);
                queue.removeFirst();
            }
            else{
                R_time += q;
                tmp = queue.getFirst(); //先頭をコピー
                tmp.num -= q;   //プロセス時間からクオンタムを引く
                queue.addLast(tmp); //先頭を末尾に
                queue.removeFirst();    //先頭削除
            }
        } if(queue.getFirst().num <= q){
                R_time += queue.getFirst().num;
                System.out.println(queue.getFirst().name+" "+R_time);
                queue.removeFirst();
            }
            else{
                R_time += q;
                tmp = queue.getFirst(); //先頭をコピー
                tmp.num -= q;   //プロセス時間からクオンタムを引く
                queue.addLast(tmp); //先頭を末尾に
                queue.removeFirst();    //先頭削除
            } queue.getFirst().num <= q queue.getFirst().num queue.getFirst() queue.getFirst queue queue.getFirst().num q {
                R_time += queue.getFirst().num;
                System.out.println(queue.getFirst().name+" "+R_time);
                queue.removeFirst();
            } R_time += queue.getFirst().num R_time queue.getFirst().num queue.getFirst() queue.getFirst queue queue.getFirst().num System.out.println(queue.getFirst().name+" "+R_time) System.out.println System.out System System.out queue.getFirst().name+" "+R_time queue.getFirst().name+" "+R_time queue.getFirst().name queue.getFirst() queue.getFirst queue queue.getFirst().name " " R_time queue.removeFirst() queue.removeFirst queue {
                R_time += q;
                tmp = queue.getFirst(); //先頭をコピー
                tmp.num -= q;   //プロセス時間からクオンタムを引く
                queue.addLast(tmp); //先頭を末尾に
                queue.removeFirst();    //先頭削除
            } R_time += q R_time q tmp = queue.getFirst() tmp queue.getFirst() queue.getFirst queue tmp.num -= q tmp.num tmp tmp.num q queue.addLast(tmp) queue.addLast queue tmp queue.removeFirst() queue.removeFirst queue String[] args args class Proc{
    String name;
    int num;

    Proc(String name,int num){
        this.name = name;
        this.num = num;
    }
} Proc String name; name int num; num Proc(String name,int num){
        this.name = name;
        this.num = num;
    } Proc {
        this.name = name;
        this.num = num;
    } this.name = name this.name this this.name name this.num = num this.num this this.num num String name name int num num
import java.util.*;

class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();   //プロセス数
        int q = sc.nextInt();   //クオンタム
        int R_time = 0;   //実時間

        ArrayDeque<Proc> queue = new ArrayDeque<>();    //キュー
        Proc tmp;

        for(int i = 0;i < n;i++){
            String name = sc.next();    //プロセス名
            int P_time = sc.nextInt();    //プロセス時間
            queue.add(new Proc(name,P_time));
        }

        while(queue.size() > 0){
            //クオンタム以下
            if(queue.getFirst().num <= q){
                R_time += queue.getFirst().num;
                System.out.println(queue.getFirst().name+" "+R_time);
                queue.removeFirst();
            }
            else{
                R_time += q;
                tmp = queue.getFirst(); //先頭をコピー
                tmp.num -= q;   //プロセス時間からクオンタムを引く
                queue.addLast(tmp); //先頭を末尾に
                queue.removeFirst();    //先頭削除
            }
        }
    }
}

class Proc{
    String name;
    int num;

    Proc(String name,int num){
        this.name = name;
        this.num = num;
    }
}
