#include <bits/stdc++.h>
using namespace std;
double f[4][207][207];
struct node {
  int x, y;
};
node a[207];
bool cmp(const node& x, const node& y) { return x.y > y.y; }
int n, m, bm;
int main() {
  while (scanf("%d %d %d", &n, &m, &bm) != EOF) {
    int i, j, k, r, w;
    int sum = 0;
    memset(f, 0, sizeof(f));
    sum = bm;
    for (i = 1; i <= n; i++) {
      scanf("%d ", &a[i].x);
    }
    for (i = 1; i <= n; i++) scanf("%d", &a[i].y);
    sort(a + 1, a + n + 1, cmp);
    double ans = 0;
    memset(f, 0, sizeof(f));
    f[0][0][bm] = 1;
    for (i = 0; i < n; i++) {
      w = (i + 1) & 1;
      r = (i)&1;
      memset(f[w], 0, sizeof(f[w]));
      for (j = 0; j <= i; j++)
        for (k = 0; k <= 200; k++) {
          int h = k + a[i + 1].y;
          if (h < 0) continue;
          if (h > 200) h = 200;
          f[w][j + 1][h] += f[r][j][k] * (double)a[i + 1].x / 100;
        }
      for (j = 0; j <= i; j++)
        for (k = 0; k <= 200; k++) {
          int h = k + a[i].y;
          f[w][j][k] += f[r][j][k] * (1 - (double)a[i + 1].x / 100);
        }
    }
    w = n & 1;
    for (j = m; j <= n; j++)
      for (k = 0; k <= 200; k++) ans += f[w][j][k];
    printf("%f\n", ans);
  }
  return 0;
}
