#include<bits/stdc++.h>
#define int long long
#define mem(x,y) memset(x,y,sizeof(x))
#define frein freopen("in.in","r",stdin)
#define freout freopen("out.out","w",stdout)
#define debug(x) cout << (#x) << " = " << x << endl;
using namespace std;
int read(){
int s = 0,w = 1;
char ch = getchar();
while(ch < '0' || ch > '9'){if(ch == '-')w = -1;ch = getchar();}
while(ch >= '0' && ch <= '9')s = s * 10 + ch - '0',ch = getchar();
return s * w;
}
int t;
int n,m;
int a[1000010];
int ans[1000010];
bool flag;
bool bk[100010];
int gcd(int x,int y){
if(!y)return x;
return gcd(y,x % y);
}
void dfs(int dep,int x,int y,int maxdep){
if(dep > maxdep)return ;
if(x == 1 && y > a[dep - 1] && !bk[y]){
a[dep] = y;
if(!flag || a[dep] < ans[dep])for(int i = 1;i <= maxdep;i ++)ans[i] = a[i];
flag = true;
return ;
}
int l = max(y / x,a[dep - 1] + 1);
int r = (maxdep - dep + 1) * y / x;
if(flag && r >= ans[maxdep])r = ans[maxdep] - 1;
for(int i = l;i <= r - 1;i ++){
if(bk[i])continue;
a[dep] = i;
int gcdd = gcd(x * i - y,y * i);
dfs(dep + 1,(x * i - y) / gcdd,y * i / gcdd,maxdep);
}
}
signed main(){
cin>>t;
for(int kunbar = 1;kunbar <= t;kunbar ++){
mem(bk,false);
mem(a,0);
flag = false;
n = read(),m = read();
int k;
k = read();
for(int i = 1;i <= k;i ++){
int x;
x = read();
bk[x] = true;
}
int gcddd = gcd(n,m);
n /= gcddd,m /= gcddd;
a[0] = 1;
printf("Case %lld: %lld/%lld=",kunbar,n,m);
for(int i = 1;i <= 100;i ++){
dfs(1,n,m,i);
if(flag){
for(int j = 1;j <= i - 1;j ++)printf("1/%lld+",ans[j]);
printf("1/%lld\n",ans[i]);
break;
}
}
}
}
主题库的埃及分数已经AC了...