#include <bits/stdc++.h>
using namespace std;
const int N = 205;
double dp[N][N], pre[N][N];
struct node {
  int p;
  int a;
} a[N];
int main() {
  int n, l, k;
  scanf("%d%d%d", &n, &l, &k);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &a[i].p);
  }
  for (int i = 1; i <= n; i++) {
    scanf("%d", &a[i].a);
  }
  memset(dp, 0, sizeof(dp));
  dp[0][k] = 1;
  for (int i = 1; i <= n; i++) {
    if (a[i].a == -1) continue;
    for (int j = 0; j <= l; j++)
      for (int k = 0; k <= 200; k++) {
        pre[j][k] = 0;
      }
    for (int j = 0; j <= l; j++)
      for (int k = 0; k <= 200; k++) {
        if (dp[j][k] == 0) continue;
        int x = k + a[i].a;
        x = min(x, 200);
        int y = min(l, j + 1);
        pre[j][k] += dp[j][k] * (100 - a[i].p) / 100;
        pre[y][x] += dp[j][k] * a[i].p / 100;
      }
    for (int j = 0; j <= l; j++)
      for (int k = 0; k <= 200; k++) dp[j][k] = pre[j][k];
  }
  for (int i = 1; i <= n; i++) {
    if (a[i].a != -1) continue;
    for (int j = 0; j <= l; j++)
      for (int k = 0; k <= 200; k++) {
        pre[j][k] = 0;
      }
    for (int j = 0; j <= l; j++)
      for (int k = 0; k <= 200; k++) {
        if (dp[j][k] == 0) continue;
        int x = k - 1;
        x = min(x, 200);
        int y = min(l, j + 1);
        pre[j][k] += dp[j][k] * (100 - a[i].p) / 100;
        if (x >= 0) pre[y][x] += dp[j][k] * a[i].p / 100;
      }
    for (int j = 0; j <= l; j++)
      for (int k = 0; k <= 200; k++) dp[j][k] = pre[j][k];
  }
  double res = 0;
  for (int i = 0; i <= 200; i++) res += dp[l][i];
  printf("%.12f\n", res);
}
