#include <iostream.h>
const int Power[] ={1, 3, 9, 27, 81, 243, 729, 2187, 6561, 19683, 59049};
unsigned char best[4][10][59049];
bool bug[150][10];
int profile[10];
int d,m,n,k;
int x,y,p;
int tx, ty, tp;
int py, py1, py2, py3;
int pp,dd,kk;
int main()
{
cin>>d;
for ( dd=0; dd<d; dd++) {
cin>>n>>m>>k;
for ( x=0; x<n; x++)
for ( y=0; y<m; y++)
bug[x][y] = false;
for ( kk=0; kk<k; kk++) {
cin>>x>>y;
bug[x-1][y-1] = true;
}
int maxP = Power[m];
for ( y=0; y<m; y++) for (p=0; p<maxP; p++) best[0][y][p] = 0;
for ( x=1; x<n; x++) for ( y=0; y<m; y++) {
for ( pp=0,p=0,py=0,py1=0,py2=0; p<maxP; p++,pp++) {
if ( p==1 && y==m-1 && x==n-1 ) break;
if ( y==0 ) { if ( pp==3 ) pp=0; py = pp;}
else if ( y==1 )
{ if ( pp==3 ) {pp=0; py++;} py1 = pp; if ( py ==3 ) py=0;}
else if ( y==2 )
{ if ( pp==3 ) {pp=0; py1++;} py2 = pp; if ( py1==3 ) { py1=0; py++;} if ( py==3 ) py=0;}
else if ( y>2)
{if ( pp==Power[y-2] ) { pp=0; py2++;} if ( py2==3 ) { py2=0; py1++;} if ( py1==3 ) { py1=0; py++; } if (py==3 ) py=0;}
if ( py ) {
if ( y==0 ) { tx = x-1; ty = m-1;}
else { tx = x; ty= y-1; }
tp = p - Power[y];
best [x&3][y][p] = best[tx&3][ty][tp];
} else {
int temp1=0, temp2=0, temp3=0;
// can place 3*2 chip
if ( y>0 && x>1 && py1==0 && !bug[x][y] && !bug[x-1][y] && !bug[x-2][y] && !bug[x][y-1] && !bug[x-1][y-1] && !bug[x-2][y-1]) {
if ( y==1 ) { tx = x-1; ty = m-1; }
else { tx = x; ty = y-2; }
tp = p + Power[y+1] - Power[y-1];
temp1 = best[tx&3][ty][tp]+1;
}
// can place 2*3 chip
if ( y>1 && x>0 && py1==0 && py2==0 && !bug[x][y] && !bug[x-1][y] && !bug[x][y-1] && !bug[x-1][y-1] && !bug[x][y-2] && !bug[x-1][y-2]) {
if ( y==2 ) { tx = x-1; ty = m-1; }
else { tx = x; ty = y-3; }
tp = p + Power[y] + Power[y-1] + Power[y-2];
temp2 = best[tx&3][ty][tp]+1;
}
// place nothing
if ( y==0 ) { tx = x-1; ty = m-1; }
else { tx = x; ty = y-1; }
temp3 = best[tx&3][ty][p];
temp1 = (temp2>temp1) ? temp2 : temp1;
temp1 = (temp3>temp1) ? temp3 : temp1;
best[x&3][y][p] = temp1;
}
}
}
cout<<int(best[(n-1)&3][m-1][0])<<endl;
}
return 0;
}