#include<bits/stdc++.h>
using namespace std;
const int N=1022;
typedef long long ll;
int n,m=0;
struct area{
int lx,ly,rx,ry;
int clr=1;
int e,s,w,n;
int siz(){
return (rx-lx)*(ry-ly);
}
}a[N*N];
int llx[N],lly[N],urx[N],ury[N],cl[N];
int xx[2*N],yy[2*N],ans[N];
signed main(){
int cx=2,cy=2,t=0;
scanf("%d %d %d",urx,ury,&n);
xx[1]=urx[0],yy[1]=ury[0],cl[0]=1;
for(int i=1;i<=n;i++){
scanf("%d%d%d%d%d",llx+i,
lly+i,urx+i,ury+i,cl+i);
if(llx[i]>=urx[i]||lly[i]>=ury[i])continue;
xx[cx++]=llx[i];
xx[cx++]=urx[i];
yy[cy++]=lly[i];
yy[cy++]=ury[i];
}
sort(xx,xx+cx);
sort(yy,yy+cy);
for(int i=1;i<cx;i++)
if(xx[i]!=xx[t])xx[++t]=xx[i];
cx=t+1;
t=0;
for(int i=1;i<cy;i++)
if(yy[i]!=yy[t])yy[++t]=yy[i];
cy=t+1;
for(int j=1;j<cy;j++)
for(int i=1;i<cx;i++){
a[++m].lx=xx[i-1];
a[m].rx=xx[i];
a[m].ly=yy[j-1];
a[m].ry=yy[j];
if(i!=1)a[m-1].e=m;
if(j!=1)a[m-cx+1].n=m;
}
for(int i=1;i<cx;i++){
a[++m].lx=xx[i-1];
a[m].rx=xx[i];
if(i!=1)a[m-1].e=m;
a[m].n=i;
}
for(int i=n;i>0;i--){
if(llx[i]>=urx[i]||lly[i]>=ury[i])continue;
int now=(cx-1)*(cy-1)+1;
while(now&&a[now].lx<llx[i])now=a[now].e;
if(!now)continue;
for(int j=now;j&&a[j].rx<=urx[i];j=a[j].e){
int cur=j;
while(a[cur].n&&a[a[cur].n].ly<lly[i])cur=a[cur].n;
if(!cur)continue;
int k;
for(k=a[cur].n;k&&a[k].ry<=ury[i];k=a[k].n){
ans[cl[i]]+=a[k].siz();
}
a[cur].n=k;
}
}
int suma=urx[0]*ury[0];
for(int i=1;i<=n+1;i++)
suma-=ans[i];
ans[1]+=suma;
for(int i=1;i<=n+1;i++)
if(ans[i])printf("%d %d\n",i,ans[i]);
return 0;
}