#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <iostream>
#include <cassert>
using namespace std;
inline int gi(){
char tmp=getchar();int ans=0;
while(!isdigit(tmp)) tmp=getchar();
while(isdigit(tmp)){
ans = ans * 10 + tmp - '0';
tmp = getchar();
}
return ans;
}
const int N = 230;
double P[N];int D[N];
double Pow[N][332],F[N][N];
double G[N];
signed main()
{
#ifdef TSUKIAKIOI
freopen("data.in","r",stdin);
#endif
int T=gi();
while(T--){
int n,r;n=gi(),r=gi();
memset(P,0,sizeof P);
memset(Pow,0,sizeof P);
memset(F,0,sizeof F);
memset(G,0,sizeof G);
for(int i=1;i<=n;++i){
scanf("%lf",&P[i]);
D[i] = gi();
}
for(int i=1;i<=n;++i){
Pow[i][0] = 1;
for(int j=1;j<=r;++j)
Pow[i][j] = Pow[i][j-1] * (1.0-P[i]);
}
G[1] = 1.0 - Pow[1][r];
F[1][0] = Pow[1][r];
F[1][1] = 1-F[1][0];
for(int i=2;i<=n;++i){
for(int j=0;j<=min(r,i);++j)
if(!j)
F[i][j] = Pow[i][r-j] * F[i-1][j];
else if(j)
F[i][j] =
(1.0-Pow[i][r-j+1]) * F[i-1][j-1] +
(Pow[i][r-j]) * F[i-1][j];
}
for(int i=2;i<=n;++i){
double res = 0;
for(int j=0;j<=min(i,r);++j)
res += F[i-1][j] * (1.0-Pow[i][r-j]);
G[i] = res;
}
double ans = 0;
for(int i=1;i<=n;++i)
ans += 1.0*G[i]*D[i];
printf("%.10lf\n",ans);
}
return 0;
}