#include <algorithm>
#include <cstdio>
#include <set>

using namespace std;

typedef pair<int, int> par;

int main() {
    int N, L;
    scanf( "%d%d", &N, &L );

    set<int> splavi[2];
    set<par> aktivne;
    aktivne.insert( par(0,1) );
    int ret[2] = { L, 0 };

    for( int i = 0; i < N; ++i ) {
        int S, D;
        scanf( "%d%d", &S, &D ); --S;

        splavi[S].insert( D );

        set<int>::iterator back = splavi[S^1].lower_bound( D );
        set<par>::iterator prev = aktivne.upper_bound( par(D,-1) );
        set<par>::iterator next = prev--;

        if( prev->second != S ) {
            aktivne.insert( par(D,S) );

            int delta;
            if( back != splavi[S^1].end() && !aktivne.count( par( *back, S^1 ) ) ) {
                delta = *back - D;
                aktivne.insert( par(*back, S^1) );
            } else {
                delta = next == aktivne.end() ? L - D : next->first - D;
                if( next != aktivne.end() ) aktivne.erase( next );
            }

            ret[S] -= delta;
            ret[S^1] += delta;
        }

        printf( "%d %d %d\n", ret[0], ret[1], aktivne.size()-1 );
    }

    return 0;
}
