#include <bits/stdc++.h>
template <class T>
inline void checkmax(T &a, T b) {
  if (b > a) a = b;
}
template <class T>
inline void checkmin(T &a, T b) {
  if (b < a) a = b;
}
using namespace std;
int a[220], n, l, k;
double p[220];
bool vis[220][220][440];
double dp[220][220][440];
double go(int pos, int won, int cantake) {
  if (cantake > 200) cantake = 200;
  if (cantake < -200) cantake = -200;
  double &ret = dp[pos][won][cantake + 220];
  if (vis[pos][won][cantake + 220]) return ret;
  vis[pos][won][cantake + 220] = true;
  if (pos == n) {
    if (won < l) return ret = 0.0;
    if (cantake < 0) return ret = 0.0;
    return ret = 1.0;
  }
  if (a[pos] == -1) {
    return ret = p[pos] * go(pos + 1, won + 1, cantake - 1) +
                 (1.0 - p[pos]) * go(pos + 1, won, cantake);
  }
  return ret = p[pos] * go(pos + 1, won + 1, cantake + a[pos]) +
               (1.0 - p[pos]) * go(pos + 1, won, cantake);
}
int main(int argc, char const *argv[]) {
  n = ({
    int t;
    scanf("%d", &t);
    t;
  }),
  l = ({
    int t;
    scanf("%d", &t);
    t;
  }),
  k = ({
    int t;
    scanf("%d", &t);
    t;
  });
  for (int i = 0; i < n; i++)
    p[i] = ({
      int t;
      scanf("%d", &t);
      t;
    });
  for (int i = 0; i < n; i++)
    a[i] = ({
      int t;
      scanf("%d", &t);
      t;
    });
  for (int i = 0; i < n; i++) p[i] /= 100.0;
  memset(vis, 0, sizeof(vis));
  printf("%.9lf\n", go(0, 0, k));
  return 0;
}
