#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;}