#include <bits/stdc++.h>
using namespace std;
struct node {
  int x, y;
};
node q[2][41000];
int n, k, len, b[210][2];
double p[210], dp[2][210][210];
double solve() {
  if (n < len) return 0;
  for (int i = 0; i < 2; ++i)
    for (int j = 0; j < n + 1; ++j)
      for (int k = 0; k < 201; ++k) dp[i][j][k] = -1;
  int pre = 1, now = 0, cnt[2] = {0, 0};
  node cur, nex;
  cur.x = 0;
  cur.y = k;
  q[0][cnt[0]++] = cur;
  dp[0][0][k] = 1;
  for (int i = 1; i <= n; ++i) {
    now = pre;
    pre = 1 - pre;
    cnt[now] = 0;
    for (int j = 0; j < cnt[pre]; ++j) {
      cur = q[pre][j];
      if (dp[now][cur.x][cur.y] < 0) {
        q[now][cnt[now]++] = cur;
        dp[now][cur.x][cur.y] = dp[pre][cur.x][cur.y] * (1 - p[i]);
      } else
        dp[now][cur.x][cur.y] += dp[pre][cur.x][cur.y] * (1 - p[i]);
      if (b[i][0] != -1) {
        nex.x = cur.x + 1;
        nex.y = min(cur.y + b[i][0], 200);
        if (dp[now][nex.x][nex.y] < 0) {
          q[now][cnt[now]++] = nex;
          dp[now][nex.x][nex.y] = dp[pre][cur.x][cur.y] * p[i];
        } else
          dp[now][nex.x][nex.y] += dp[pre][cur.x][cur.y] * p[i];
      } else if (cur.y > 0) {
        nex.x = cur.x + 1;
        nex.y = cur.y - 1;
        if (dp[now][nex.x][nex.y] < 0) {
          q[now][cnt[now]++] = nex;
          dp[now][nex.x][nex.y] = dp[pre][cur.x][cur.y] * p[i];
        } else
          dp[now][nex.x][nex.y] += dp[pre][cur.x][cur.y] * p[i];
      }
      dp[pre][cur.x][cur.y] = -1;
    }
  }
  double ans = 0;
  for (int j = len; j <= n; ++j)
    for (int i = 0; i <= 200; ++i)
      if (dp[now][j][i] > 0) ans += dp[now][j][i];
  return ans;
}
int cmp(const void *a, const void *b) {
  int *c = (int *)a, *d = (int *)b;
  return d[0] - c[0];
}
int main() {
  scanf("%d %d %d", &n, &len, &k);
  for (int i = 1; i <= n; ++i) scanf("%d", &b[i][1]);
  for (int i = 1; i <= n; ++i) scanf("%d", &b[i][0]);
  qsort(&b[1], n, sizeof(b[0]), cmp);
  for (int i = 1; i <= n; ++i) p[i] = (b[i][1] + 0.0) / 100;
  printf("%.9lf\n", solve());
  return 0;
}
