#include <bits/stdc++.h>
using namespace std;
const int mn = 30010, mk = 2e5 + 10;
char ch[mk];
bool dp[mn];
int cnt[30];
int main()
{
int T;
cin >> T;
while (T--)
{
memset(cnt, 0, sizeof cnt);
int n, m, k;
cin >> n >> m >> k;
cin >> ch;
for (int i = 0; i < k; i++)
cnt[ch[i] - 'A']++;
int dy = k - m - n;
int ans = 2e9;
for (int i = 0; i < 26; i++) // 必定只有一个字母重复 枚举重复的字母
{
memset(dp, 0, sizeof dp);
dp[0] = 1;
for (int j = 0; j < 26; j++) // 01背包 用除了i的字母可以组成的数
{
if (i == j)
continue;
for (int K = n; K >= cnt[j]; K--)
if (dp[K - cnt[j]] == 1)
dp[K] = 1;
}
for (int j = 0; j <= min(n, cnt[i]); j++) // 重复的字母有j个在行中
{
if (dp[n - j]) // n - j 可以由除了 i 的其他字母组成
ans = min(ans, j * max(0, cnt[i] - j - dy)); // 列中最少有几个i
}
}
cout << ans << endl;
}
return 0;
}