/*
    如果已经知道走这些passage的顺序的话,应该可以dp出来的
    但是这里不确定顺序,要选择最优,可以按照P/Q从大到小排序
    遇到匪徒几率Q越小,出去几率P越大,肯定是我们优先考虑的!
    Help Bill to find out the probability that he can escape from this castle if he chose the optimal strategy.

    dp[i][j]表示现在有钱j,在i个passage处,最后能够出去的概率
    dp[n-1,j]=P[n-1]
    dp[i,j]=P[i]+Q[i]*dp[i+1,j-1]+(1-P[i]-Q[i])*dp[i+1,j]   j>0
    dp[i,j]=P[i]+(1-P[i]-Q[i])*dp[i+1,j]   j=0

    概率题期望题,一般都是表示现在离目标的值
    (因为当前接下来的方案确定了,概率也知道了,而当前从前面过来就不确定概率了,其概率跟路径有关)
*/

#include
<cstdio>
#include
<algorithm>
using namespace std;

struct Pas
{
    
double p,q;
    
bool operator<(const Pas&B)const
    
{
        
return p/q>B.p/B.q;
    }

}
pas[1010];

double dp[1010][11];

int main()
{
    
int n,m,T,t=1;
    scanf(
"%d",&T);
    
while(T--)
    
{
        scanf(
"%d%d",&n,&m);
        
for(int i=0;i<n;i++)
            scanf(
"%lf%lf",&pas[i].p,&pas[i].q);
        sort(pas,pas
+n);
        
//mesmet(dp,0,sizeof(dp));
        for(int j=0;j<=m;j++)dp[n-1][j]=pas[n-1].p;
        
for(int i=n-2;i>=0;i--)
        
{
            dp[i][
0]=pas[i].p+(1-pas[i].p-pas[i].q)*dp[i+1][0];
            
for(int j=1;j<=m;j++)
            
{
                dp[i][j]
=pas[i].p+pas[i].q*dp[i+1][j-1]+(1-pas[i].p-pas[i].q)*dp[i+1][j];
            }

        }

        printf(
"Case %d: %.5f\n",t++,dp[0][m]);
    }

    
return 0;
}