#include <bits/stdc++.h>
using namespace std;
int a[210];
int n, low, k;
double pr[210];
double pdp[210][210], pdc[210][210][210];
bool mc[210][210][210], mp[210][210];
double calcp(int x, int p) {
  if (p < 0) return 0;
  if (x == n && p == 0) return 1;
  if (x == n) return 0;
  if (mp[x][p]) return pdp[x][p];
  mp[x][p] = 1;
  double res;
  if (a[x] != -1)
    res = calcp(x + 1, p);
  else
    res = pr[x] * calcp(x + 1, p - 1) + (1 - pr[x]) * calcp(x + 1, p);
  return (pdp[x][p] = res);
}
double calcc(int x, int p, int c) {
  c = max(c, 0);
  if (p < 0) return 0;
  if (x == n && p == 0 && c == 0) return 1;
  if (x == n) return 0;
  if (mc[x][p][c]) return pdc[x][p][c];
  mc[x][p][c] = 1;
  double res;
  if (a[x] == -1)
    res = calcc(x + 1, p, c);
  else
    res = pr[x] * calcc(x + 1, p - 1, c - a[x]) +
          (1 - pr[x]) * calcc(x + 1, p, c);
  return (pdc[x][p][c] = res);
}
int main() {
  scanf("%d%d%d", &n, &low, &k);
  for (int i = 0; i < n; i++) {
    scanf(" %lf", &pr[i]);
    pr[i] /= 100.0;
  }
  for (int i = 0; i < n; i++) scanf(" %d", &a[i]);
  memset(mp, 0, sizeof(mp));
  memset(mc, 0, sizeof(mc));
  double res = 0;
  for (int i = low; i <= n; i++)
    for (int j = 0; j <= i; j++) {
      res += calcp(0, j) * calcc(0, i - j, j - k);
    }
  printf("%.10lf\n", res);
  return 0;
}
