#include <iostream>
using namespace std;
typedef long long LL;
int dep;
bool flag;
LL s[30], ans[30];
int q[10], k;
LL gcd(LL x,LL y)
{
return y ? gcd(y, x % y) : x;
}
bool in(int x)
{
for (int i=0;i<k;i++)
if (x == q[i])
return true;
return false;
}
bool check()
{
for (int i=dep;i;i--)
if (s[i] != ans[i])
return s[i] < ans[i];
return false;
}
void dfs(LL a,LL b,int num)
{
if (num > dep)
return;
if (a == 1 && b > s[num - 1])
{
s[num] = b;
if (!flag || check())
{
for (int i=1;i<=dep;i++)
ans[i] = s[i];
flag = true;
}
return;
}
LL l = max(b / a, s[num - 1] + 1), r = (dep - num + 1) * b / a;
if (flag && r >= ans[dep])
r = ans[dep] - 1;
for (LL i=l;i<r;i++)
{
if (in(i))
continue;
s[num] = i;
LL y = gcd(a * i - b, b * i);
dfs((a * i - b) / y, b * i / y, num + 1);
}
}
int main()
{
int T;
scanf("%d", &T);
for (int t=1;t<=T;t++)
{
s[0] = 1;
LL a, b;
scanf("%lld%lld%d", &a, &b, &k);
for (int i=0;i<k;i++)
scanf("%d", &q[i]);
printf("Case %d: %lld/%lld=", t, a, b);
dep = 0;
flag = false;
while (++dep)
{
dfs(a, b, 1);
if (flag)
{
for (int i=1;i<dep;i++)
printf("1/%lld+", ans[i]);
printf("1/%lld\n", ans[dep]);
break;
}
}
}
return 0;
}