//longlong5a6
#include <bits/stdc++.h>
#define pii pair<int,int>
#define F first
#define S second
#define bit(i, x)((x >> i) & 1)
#define sobit(i)  __builtin_popcount((int)(i))
#define pb push_back
#define all(x) x.begin(),x.end()
#define vi vector<int>
#define For(i,x,n) for(int (i)=(int)(x);(i)<=(int)(n);(i)++)
#define round(m,n) setprecision((int)m) << fixed << double(n)
#define down "\n"
#define TASK "biendoi"
#define maxn 1001

using namespace std;

bool f[maxn][maxn];
bool g[maxn];
int c[maxn];

struct query
{
    int ty,x,y;
}Q[maxn*100];

vector<query> his;
vector<int>line[maxn*100];
int n,m,q;
int cnt=0;
int res[maxn*100];
void up(int i)
{
    if (Q[i].ty==1)
    {
        int x=Q[i].x;
        int y=Q[i].y;
        if(f[x][y]^g[x]==0)
        {
            c[x]++;
            f[x][y]^=1;
            cnt++;
            his.pb(Q[i]);
        }
        else his.pb({4,0,0});
    }
    if (Q[i].ty==2)
    {
        int x=Q[i].x;
        int y=Q[i].y;
        if(f[x][y]^g[x]==1)
        {
            c[x]--;
            f[x][y]^=1;
            cnt--;
            his.pb(Q[i]);
        }
        else his.pb({4,0,0});
    }
    if (Q[i].ty==3)
    {
        int x=Q[i].x;
        cnt+=(m-c[x])-c[x];
        c[x]=m-c[x];
        g[x]^=1;
        his.pb(Q[i]);
    }
}
void Back(query a)
{
    auto [ty,x,y]=a;
    if (ty==1)
    {
        cnt--;
        c[x]--;
        f[x][y]^=1;
    }
    if (ty==2)
    {
        cnt++;
        c[x]++;
        f[x][y]^=1;
    }
    if (ty==3)
    {
        cnt+=(m-c[x])-c[x];
        c[x]=m-c[x];
        g[x]^=1;
    }
}
void roll(int pos)
{
    while ((int) his.size()>pos)
    {
        Back(his.back());
        his.pop_back();
    }
}
void dfs(int u)
{
    up(u);
    res[u]=cnt;
    int pos=his.size();
    for(auto i:line[u])
    {
        dfs(i);
        roll(pos);
    }
}


int main()
{
    ios_base::sync_with_stdio(0);
        cin.tie();
        cout.tie();
    if (fopen("in.txt","r"))
        {
            freopen("in.txt","r",stdin);

        }
    if (fopen(TASK".INP","r"))
            {
                freopen(TASK".INP","r",stdin);
                freopen(TASK".OUT","w",stdout);
            }
    cin>>n>>m>>q;
    For(i,1,q)
    {
        int ty;
        cin>>ty;
        int x,y;
        if (ty!=3&&ty!=4)
        {
            cin>>x>>y;
            Q[i]={ty,x,y};
            line[i-1].pb(i);
        }
        else
        {
            cin>>x;
            Q[i]={ty,x,0};
            if (ty==4) line[x].pb(i);
            else line[i-1].pb(i);
        }
    }   
    dfs(0);
    For(i,1,q) cout<<res[i]<<down;
}
