#include <bits/stdc++.h>

using namespace std;

const int MOD = 1e9 + 7;
const int N = 2010;

int n, m, dp[N][N], kol[N][N], q;
vector<pair<int, int> > to[N][N];

inline void solve()
{
	cin >> n >> m >> q;
	for (int i = 0; i < n; i++)
		for (int j = 0; j < m; j++)
			to[i][j].clear();
	for (int i = 0; i < q; i++)
	{
		int x1, y1, x2, y2;
		cin >> x1 >> y1 >> x2 >> y2;
		x1--, x2--, y1--, y2--;
		for (int xa1 = x1; xa1 <= x2; xa1++)
			for (int ya1 = y1; ya1 <= y2; ya1++)
				for (int xa2 = xa1 + 1; xa2 <= x2; xa2++)
					for (int ya2 = ya1 + 1; ya2 <= y2; ya2++)
						to[xa1][ya1].push_back(make_pair(xa2, ya2));		
	}
	for (int i = 0; i < n; i++)
		for (int j = 0; j < m; j++)
		{	
			sort(to[i][j].begin(), to[i][j].end());
			to[i][j].resize(unique(to[i][j].begin(), to[i][j].end()) - to[i][j].begin());	
		}	
	for (int i = 0; i < n; i++)
		for (int j = 0; j < m; j++)
		{
			dp[i][j] = 1;
			kol[i][j] = 1;
		}
	for (int s = 0; s <= (n + m - 2); s++)
		for (int i = 0; i < min(s + 1, n); i++)
		{
			int j = (s - i);
			if (j < 0 || j >= m) continue;
			for (pair<int, int> t : to[i][j])
			{
				if (dp[t.first][t.second] > dp[i][j] + 1) continue;
				if (dp[t.first][t.second] < dp[i][j] + 1) 
				{
					dp[t.first][t.second] = dp[i][j] + 1;
					kol[t.first][t.second] = 0;
				}
				kol[t.first][t.second] += kol[i][j];
				if (kol[t.first][t.second] >= MOD) kol[t.first][t.second] -= MOD;
			}
		}
	int mx = 0;
	int ans = 0;
	for (int i = 0; i < n; i++)
		for (int j = 0; j < m; j++)
 			mx = max(mx, dp[i][j]);
	for (int i = 0; i < n; i++)
		for (int j = 0; j < m; j++)
			if (mx == dp[i][j])   
			{
				ans += kol[i][j];
				if (ans >= MOD) ans -= MOD;
			}
	cout << mx << " " << ans << "\n";						
}

int main()
{
	ios::sync_with_stdio(0);
	int T;
	cin >> T;
	for (int z = 0; z < T; z++)
		solve();
	return 0;
}