//本题大意..类似于寻找坐标上的左上角的点的sum
#include<stdio.h>
#include<stdlib.h>#include<string.h>
#include<vector>
#include<iostream>
#include<math.h>
#include<algorithm>
const int inf = 0x3f3f3f;
const int MN = 1100000;
using namespace std;
int tree[11111];
int maxn,n,m,k,test;
struct Road
{
int beg,end;
Road(int beg1 , int end1):beg(beg1),end(end1) {}
Road() {};
bool operator < (const Road &tmp) const
{
if(end < tmp.end)return 0;
if(end > tmp.end)return 1;
if(end == tmp.end)
{
if(beg < tmp.beg)return 0;
else return 1;
}
}
};
Road road[MN];
int Lowbit(int x)
{
return x&(-x);
}
int Getsum(int x)
{
int sum = 0;
while(x > 0)
{
sum += tree[x];
x -= Lowbit(x);
}
return sum;
}
void Updata(int x)
{
for(int i = x ; i <= n ; i += Lowbit(i))
{
tree[i] ++;
}
}
int main()
{
while(scanf("%d",&test) != EOF)
{
for(int p = 1 ; p <= test ; p++)
{
scanf("%d%d%d",&n,&m,&k);
memset(tree,0,sizeof(tree));
maxn = 0;
for(int i = 0 ; i < k ; i++)
{
scanf("%d%d",&road[i].beg,&road[i].end);
maxn = max(maxn,road[i].beg);
}
sort(road,road+k);
// for(int i = 0 ; i < k ; i++)
// printf("%d %d\n",road[i].beg,road[i].end);
__int64 ans = 0;
for(int i = 0 ; i < k ;)
{
int vis;
for(int j = i ; road[j].beg == road[i].beg && j < k; j++)
{
ans += Getsum(road[j].beg-1);
vis = j;
}
for(int j = i ; j <= vis ; j++)
Updata(road[j].beg);
i = vis+1;
}
printf("Test case %d: %I64d\n",p,ans);
}
}
}