using namespace std;
#include <bits/stdc++.h>

#define fori(a, b) for(int i = a;i <= b;i++)
#define forj(a, b) for(int j = a;j <= b;j++)
#define forl(a, b) for(int l = a;l <= b;l++)
#define fordi(b, a) for(int i = b;i >= a;i--)
#define fordj(b, a) for(int j = b;j >= a;j--)
#define fordl(b, a) for(int l = b;l >= a;l--)

#define MAX 100100
#define MAGIC 29
#define MOD 1000000007
#define F first
#define S second
#define pb push_back
#define mp make_pair

const double PI = acos(-1);
typedef long long ll;

int n, m, q, res[MAX], cont, acm[MAX];
vector<int> adj[MAX];
pair<int, int> rm[MAX];
pair<int, int> add[MAX];
int swp[MAX];
bool shelf[1010][1010];
bool rev[1010];

bool fadd(int a, int b){

    if(!rev[a]){
        if(shelf[a][b]) return false;
        else{
            cont++;
            acm[a]++;
            return shelf[a][b] = true;
        }
    }
    else{
        if(shelf[a][b]){
            cont++;
            acm[a]++;
            shelf[a][b] = false;
            return true;
        }
        else return false;
    }
}

bool frm(int a, int b){

    //cout << "rm " << a << " " << b << " " << rev[a] << endl;
    
    if(!rev[a]){
        if(shelf[a][b]){
            cont--;
            acm[a]--;
            shelf[a][b] = false;
            return true;
        }
        else return false;
    }
    else{
        if(shelf[a][b]) return false;
        else{
            cont--;
            acm[a]--;
            shelf[a][b] = true;
            return true;
        }
    }
}

bool frv(int a){

    cont += m - 2*acm[a];
    acm[a] = m - acm[a];
    rev[a] = !rev[a];

    return true;
}

void f(int pos){
    bool done = false;

    if(add[pos].F != -1) done = fadd(add[pos].F, add[pos].S);
    if(rm[pos].F != -1) done = frm(rm[pos].F, rm[pos].S);
    if(swp[pos] != -1) done = frv(swp[pos]);

    //cout << "f " << pos << " " << done << endl;

    res[pos] = cont;

    fori(0, (int)adj[pos].size() - 1) f(adj[pos][i]);

    if(done){
        if(add[pos].F != -1) frm(add[pos].F, add[pos].S);
        if(rm[pos].F != -1) fadd(rm[pos].F, rm[pos].S);
        if(swp[pos] != -1) frv(swp[pos]);
    }
}

int main(){
    //freopen("in", "r", stdin);
    int a, b, c;

    memset(shelf, false, sizeof(shelf));
    memset(rev, false, sizeof(rev));
    memset(acm, 0, sizeof(acm));
    cont = 0;

    add[0] = mp(-1, -1);
    rm[0] = mp(-1, -1);
    swp[0] = -1;
    
    cin >> n >> m >> q;
    fori(1, q){
        scanf("%d", &a);

        if(a == 1 || a == 2){
            scanf("%d %d", &b, &c);
        }
        else scanf("%d", &b);

        add[i] = mp(-1, -1);
        rm[i] = mp(-1, -1);
        swp[i] = -1;

        if(a == 1) add[i] = mp(b, c);
        else if(a == 2) rm[i] = mp(b, c);
        else if(a == 3) swp[i] = b;
        else adj[b].pb(i);

        if(a != 4) adj[i-1].pb(i);
    }

    f(0);

    fori(1, q) printf("%d\n", res[i]);
  
    return 0;
}
