#include <bits/stdc++.h>
using namespace std;
double dp[201][201][401];
const int OFFSET = 200;
int n, l, k;
pair<int, int> tours[222];
double doit(int needed, int step, int bags) {
  needed = max(needed, 0);
  bags = min(bags, 200);
  if (step == n) {
    if (needed) return 0.;
    if (bags >= 0) return 1.;
    return 0.;
  }
  double &res = dp[needed][step][OFFSET + bags];
  if (res >= 0.) return res;
  res = 0.;
  if (tours[step].first > 0) {
    res += (tours[step].second / 100.) *
           doit(needed - 1, step + 1, bags + tours[step].first);
    res += ((100. - tours[step].second) / 100.) * doit(needed, step + 1, bags);
  } else {
    res += (tours[step].second / 100.) * doit(needed - 1, step + 1, bags - 1);
    res += ((100. - tours[step].second) / 100.) * doit(needed, step + 1, bags);
  }
  return res;
}
int main() {
  cin >> n >> l >> k;
  memset(dp, -1, sizeof(dp));
  for (int i = 0; i < n; ++i) cin >> tours[i].second;
  for (int i = 0; i < n; ++i) cin >> tours[i].first;
  sort(tours, tours + n);
  reverse(tours, tours + n);
  printf("%.10lf\n", doit(l, 0, k));
  return 0;
}
