constint ELAS = 1<<14; staticchar buf[ELAS],*p1=buf,*p2=buf; inlinechargc() { return (p1==p2)&&(p2=(p1=buf)+fread(buf,1,ELAS,stdin),p1==p2)?EOF:*p1++; } inlineintread() { registerint x = 0; registerchar c = gc(); registerbool m = false; while ((c < '0' || c > '9') && (c ^ '-')) c = gc(); if (c == '-') m = true, c = gc (); while (c>='0'&&c<='9') x = (x<<3) + (x<<1) + (c^'0'), c = gc(); return m? -x:x; } inlinedoublegetdou() { registerdouble x=0; registerchar c = gc (); while (c < '0' || c > '9') c = gc(); while (c>='0'&&c<='9') x = x * 10 + (c^'0'), c = gc(); if (c == '.') { registerdouble s = 0.1, c = gc (); while (c>='0'&&c<='9') x = x + (c-'0')*s, s/=10, c = gc (); } return x; }
inlineconstint& min(constint& a, constint& b){return a<b? a:b;}
#define Re register
structnode { int opt; double dat; } dat[201];
inlineboolcmp(node a, node b){return a.opt > b.opt;} double dp[201][201][201];
signedmain() { freopen ("guard.in", "r", stdin); freopen ("guard.out","w",stdout); registerint n = read (), l = read (), k = read (), tmp; for (Re int i = 1; i <= n; ++ i) dat[i].dat = getdou()/100; for (Re int i = 1; i <= n; ++ i) dat[i].opt = read (); std::sort (dat + 1, dat + n + 1, cmp); dp[0][0][min(n, k)] = 1.0; for (Re int i = 1; i <= n; ++ i) { for (Re int j = 0; j <= i; ++ j) { for (Re int K = 0; K <= n; ++ K) { dp[i][j][K] += dp[i-1][j][K] * (1 - dat[i].dat); if ((tmp = min (K + dat[i].opt, n)) < 0) continue; dp[i][j+1][tmp] += dp[i-1][j][K] * dat[i].dat; } } } registerdouble ans = 0.0; for (Re int i = l; i <= n; ++ i) for (Re int j = 0; j <= n; ++ j) ans += dp[n][i][j]; printf ("%.6lf", ans); fclose (stdin), fclose (stdout); return0; }