#include <iostream>
#include <cmath>
#include <cstdio>
#include <vector>
#include <queue>
#include <cstring>
#include <algorithm>
using namespace std;
int n, p, sz, A[55], vis[1005], B[52][52], adj[1005][1005];
bool bfs()
{
queue < int > q;
memset(vis, -1, sizeof(vis));
q.push(0);
vis[0] = 0;
bool ok = false;
while(!q.empty())
{
int temp = q.front(); q.pop();
for(int i = 0;i < sz;++i)
{
if(vis[i] == -1 and adj[temp][i] > 0)
{
vis[i] = temp;
q.push(i);
if(i == sz - 1)
{
ok = true;
break;
}
}
}
}
if(!ok) return false;
int temp = sz - 1;
while(vis[temp] != temp)
{
int prev = vis[temp];
adj[prev][temp] -= 1;
adj[temp][prev] += 1;
temp = prev;
}
return true;
}
int main()
{
// freopen("B-large-practice.in", "r", stdin);
// freopen("out.out", "w", stdout);
int t, c = 0;
scanf("%d", &t);
while(t--)
{
++c;
scanf("%d%d", &n, &p);
sz = n * p + 2;
for(int i = 0;i < n;++i)
scanf("%d", A + i);
for(int i = 0;i < n;++i)
for(int j = 0;j < p;++j)
scanf("%d", &B[i][j]);
///from src
for(int i = 0;i < p;++i)
{
int t = B[0][i];
int ma = floor(t * 10.0 / (A[0] * 9.0));
int mi = ceil(t * 10.0 / (A[0] * 11.0));
if(mi <= ma)
adj[0][i + 1] = 1;
}
///between packages
for(int i = 0;i < n - 1;++i)
{
for(int j = 0;j < p;++j)
{
int t1 = B[i][j];
int ma1 = floor(t1 * 10.0 / (A[i] * 9.0));
int mi1 = ceil(t1 * 10.0 / (A[i] * 11.0));
for(int k = 0;k < p;++k)
{
int t2 = B[i + 1][k];
int ma2 = floor(t2 * 10.0 / (A[i + 1] * 9.0));
int mi2 = ceil(t2 * 10.0 / (A[i + 1] * 11.0));
if(mi1 <= ma1 and mi2 <= ma2 and ((mi2 >= mi1 and mi2 <= ma1) or (ma2 >= mi1 and ma2 <= ma1)))
adj[p * i + j + 1][p * (i + 1) + k + 1] = 1;
}
}
}
///to dest
for(int i = 0;i < p;++i)
{
int t = B[n - 1][i];
int ma = floor(t * 10.0 / (A[n - 1] * 9.0));
int mi = ceil(t * 10.0 / (A[n - 1] * 11.0));
if(mi <= ma)
adj[p * (n - 1) + i + 1][sz - 1] = 1;
}
int ans = 0;
while(bfs())
++ans;
printf("Case #%d: %d\n", c, ans);
memset(adj, 0, sizeof(adj));
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y21hdGg+CiNpbmNsdWRlIDxjc3RkaW8+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxxdWV1ZT4KI2luY2x1ZGUgPGNzdHJpbmc+CiNpbmNsdWRlIDxhbGdvcml0aG0+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IG4sIHAsIHN6LCBBWzU1XSwgdmlzWzEwMDVdLCBCWzUyXVs1Ml0sIGFkalsxMDA1XVsxMDA1XTsKCmJvb2wgYmZzKCkKewogICAgcXVldWUgPCBpbnQgPiBxOwogICAgbWVtc2V0KHZpcywgLTEsIHNpemVvZih2aXMpKTsKICAgIHEucHVzaCgwKTsKICAgIHZpc1swXSA9IDA7CiAgICBib29sIG9rID0gZmFsc2U7CiAgICB3aGlsZSghcS5lbXB0eSgpKQogICAgewogICAgICAgIGludCB0ZW1wID0gcS5mcm9udCgpOyAgICAgICBxLnBvcCgpOwoKICAgICAgICBmb3IoaW50IGkgPSAwO2kgPCBzejsrK2kpCiAgICAgICAgewogICAgICAgICAgICBpZih2aXNbaV0gPT0gLTEgYW5kIGFkalt0ZW1wXVtpXSA+IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZpc1tpXSA9IHRlbXA7CiAgICAgICAgICAgICAgICBxLnB1c2goaSk7CiAgICAgICAgICAgICAgICBpZihpID09IHN6IC0gMSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBvayA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBpZighb2spICAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgIGludCB0ZW1wID0gc3ogLSAxOwogICAgd2hpbGUodmlzW3RlbXBdICE9IHRlbXApCiAgICB7CiAgICAgICAgaW50IHByZXYgPSB2aXNbdGVtcF07CiAgICAgICAgYWRqW3ByZXZdW3RlbXBdIC09IDE7CiAgICAgICAgYWRqW3RlbXBdW3ByZXZdICs9IDE7CiAgICAgICAgdGVtcCA9IHByZXY7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKfQoKaW50IG1haW4oKQp7Ci8vICAgIGZyZW9wZW4oIkItbGFyZ2UtcHJhY3RpY2UuaW4iLCAiciIsIHN0ZGluKTsKLy8gICAgZnJlb3Blbigib3V0Lm91dCIsICJ3Iiwgc3Rkb3V0KTsKCiAgICBpbnQgdCwgYyA9IDA7CiAgICBzY2FuZigiJWQiLCAmdCk7CiAgICB3aGlsZSh0LS0pCiAgICB7CiAgICAgICAgKytjOwogICAgICAgIHNjYW5mKCIlZCVkIiwgJm4sICZwKTsKICAgICAgICBzeiA9IG4gKiBwICsgMjsKCiAgICAgICAgZm9yKGludCBpID0gMDtpIDwgbjsrK2kpCiAgICAgICAgICAgIHNjYW5mKCIlZCIsIEEgKyBpKTsKCiAgICAgICAgZm9yKGludCBpID0gMDtpIDwgbjsrK2kpCiAgICAgICAgICAgIGZvcihpbnQgaiA9IDA7aiA8IHA7KytqKQogICAgICAgICAgICAgICAgc2NhbmYoIiVkIiwgJkJbaV1bal0pOwoKCiAgICAgICAgLy8vZnJvbSBzcmMKICAgICAgICBmb3IoaW50IGkgPSAwO2kgPCBwOysraSkKICAgICAgICB7CiAgICAgICAgICAgIGludCB0ID0gQlswXVtpXTsKICAgICAgICAgICAgaW50IG1hID0gZmxvb3IodCAqIDEwLjAgLyAoQVswXSAqIDkuMCkpOwogICAgICAgICAgICBpbnQgbWkgPSBjZWlsKHQgKiAxMC4wIC8gKEFbMF0gKiAxMS4wKSk7CgogICAgICAgICAgICBpZihtaSA8PSBtYSkKICAgICAgICAgICAgICAgIGFkalswXVtpICsgMV0gPSAxOwogICAgICAgIH0KCiAgICAgICAgLy8vYmV0d2VlbiBwYWNrYWdlcwogICAgICAgIGZvcihpbnQgaSA9IDA7aSA8IG4gLSAxOysraSkKICAgICAgICB7CiAgICAgICAgICAgIGZvcihpbnQgaiA9IDA7aiA8IHA7KytqKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpbnQgdDEgPSBCW2ldW2pdOwogICAgICAgICAgICAgICAgaW50IG1hMSA9IGZsb29yKHQxICogMTAuMCAvIChBW2ldICogOS4wKSk7CiAgICAgICAgICAgICAgICBpbnQgbWkxID0gY2VpbCh0MSAqIDEwLjAgLyAoQVtpXSAqIDExLjApKTsKCiAgICAgICAgICAgICAgICBmb3IoaW50IGsgPSAwO2sgPCBwOysraykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpbnQgdDIgPSBCW2kgKyAxXVtrXTsKICAgICAgICAgICAgICAgICAgICBpbnQgbWEyID0gZmxvb3IodDIgKiAxMC4wIC8gKEFbaSArIDFdICogOS4wKSk7CiAgICAgICAgICAgICAgICAgICAgaW50IG1pMiA9IGNlaWwodDIgKiAxMC4wIC8gKEFbaSArIDFdICogMTEuMCkpOwoKICAgICAgICAgICAgICAgICAgICBpZihtaTEgPD0gbWExIGFuZCBtaTIgPD0gbWEyIGFuZCAoKG1pMiA+PSBtaTEgYW5kIG1pMiA8PSBtYTEpIG9yIChtYTIgPj0gbWkxIGFuZCBtYTIgPD0gbWExKSkpCiAgICAgICAgICAgICAgICAgICAgICAgIGFkaltwICogaSArIGogKyAxXVtwICogKGkgKyAxKSArIGsgKyAxXSA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vL3RvIGRlc3QKICAgICAgICBmb3IoaW50IGkgPSAwO2kgPCBwOysraSkKICAgICAgICB7CiAgICAgICAgICAgIGludCB0ID0gQltuIC0gMV1baV07CiAgICAgICAgICAgIGludCBtYSA9IGZsb29yKHQgKiAxMC4wIC8gKEFbbiAtIDFdICogOS4wKSk7CiAgICAgICAgICAgIGludCBtaSA9IGNlaWwodCAqIDEwLjAgLyAoQVtuIC0gMV0gKiAxMS4wKSk7CgogICAgICAgICAgICBpZihtaSA8PSBtYSkKICAgICAgICAgICAgICAgIGFkaltwICogKG4gLSAxKSArIGkgKyAxXVtzeiAtIDFdID0gMTsKICAgICAgICB9CiAgICAgICAgaW50IGFucyA9IDA7CiAgICAgICAgd2hpbGUoYmZzKCkpCiAgICAgICAgICAgICsrYW5zOwoKICAgICAgICBwcmludGYoIkNhc2UgIyVkOiAlZFxuIiwgYywgYW5zKTsKICAgICAgICBtZW1zZXQoYWRqLCAwLCBzaXplb2YoYWRqKSk7CiAgICB9CiAgICByZXR1cm4gMDsKfQo=