#include <bits/stdc++.h>
using namespace std;
const int iinf = 1e9 + 7;
const long long linf = 1ll << 60;
const double dinf = 1e10;
template <typename T>
inline void scf(T &x) {
  bool f = 0;
  x = 0;
  char c = getchar();
  while ((c < '0' || c > '9') && c != '-') c = getchar();
  if (c == '-') {
    f = 1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') {
    x = x * 10 + c - '0';
    c = getchar();
  }
  if (f) x = -x;
  return;
}
template <typename T1, typename T2>
void scf(T1 &x, T2 &y) {
  scf(x);
  return scf(y);
}
template <typename T1, typename T2, typename T3>
void scf(T1 &x, T2 &y, T3 &z) {
  scf(x);
  scf(y);
  return scf(z);
}
const int N = 233;
int n, l, k;
int p[N], a[N];
double dp[N][N][N * 2];
int main() {
  scf(n, l, k);
  for (int i = (1); i <= (n); i++) scf(p[i]);
  for (int i = (1); i <= (n); i++) scf(a[i]);
  dp[0][0][k + 200] = 1.0;
  for (int i = 0; i < (n); i++)
    for (int j = (0); j <= (i); j++)
      for (int k = (0); k <= (400); k++)
        if (dp[i][j][k] > 1e-20) {
          dp[i + 1][j][k] += dp[i][j][k] * (1.0 * (100 - p[i + 1]) / 100.0);
          int nxtk = k;
          if (a[i + 1] < 0)
            nxtk--;
          else
            nxtk += a[i + 1];
          if (nxtk > 400) nxtk = 400;
          if (k >= 0)
            dp[i + 1][j + 1][nxtk] += dp[i][j][k] * (1.0 * p[i + 1] / 100.0);
        }
  double ans = 0.0;
  for (int j = (l); j <= (n); j++)
    for (int k = (200); k <= (400); k++) ans += dp[n][j][k];
  printf("%.12f\n", ans);
  return 0;
}
