#include <bits/stdc++.h>
using namespace std;
struct node {
  int bag;
  double pr;
};
double dp[250][250][250];
bool col[250][250][250];
int a[250], n, l, k;
node nodes[250];
double pr[250];
bool comp(node a, node b) { return a.bag > b.bag; }
double maxi(double a, double b) {
  if (a > b) return a;
  return b;
}
double cal(int ind, int bag, int won);
int main() {
  int i, j;
  scanf("%d %d %d", &n, &l, &k);
  double jd = 100;
  for (i = 1; i <= n; i++) {
    scanf("%d", &j);
    pr[i] = 100;
    jd = j;
    pr[i] = jd / pr[i];
    nodes[i].pr = pr[i];
  }
  for (i = 1; i <= n; i++) {
    scanf("%d", &a[i]);
    nodes[i].bag = a[i];
  }
  sort(nodes + 1, nodes + n + 1, comp);
  for (i = 1; i <= n; i++) {
    pr[i] = nodes[i].pr;
    a[i] = nodes[i].bag;
  }
  double ans = cal(1, k, 0);
  printf("%lf\n", ans);
  return 0;
}
double cal(int ind, int bag, int won) {
  if (bag < 0) return 0;
  if (ind > n) {
    if (won >= l) return 1;
    return 0;
  }
  if (col[ind][bag][won]) return dp[ind][bag][won];
  col[ind][bag][won] = 1;
  double pd, pd1, ret;
  pd = 1.00 - pr[ind];
  if (a[ind] == -1) {
    ret = cal(ind + 1, bag - 1, won + 1) * pr[ind];
    ret += cal(ind + 1, bag, won) * pd;
  } else {
    int b = bag + a[ind];
    if (b > 200) b = 200;
    ret = cal(ind + 1, b, won + 1) * pr[ind];
    ret += cal(ind + 1, bag, won) * pd;
  }
  return dp[ind][bag][won] = ret;
}
