#include <bits/stdc++.h>
using namespace std;
int n, l, k;
double prob[202];
int cap[202];
bool vis[202][202][202][2];
double dp[202][202][202][2];
double f(int idx, int cnt, int wt, int flag) {
  if (wt >= 200) wt = 200;
  if (idx == n) {
    if (cnt >= l && (!flag)) return 1.0;
    return 0.0;
  }
  if (vis[idx][cnt][wt][flag]) return dp[idx][cnt][wt][flag];
  vis[idx][cnt][wt][flag] = true;
  double ans = 0.0;
  ans += (1.0 - prob[idx]) * f(idx + 1, cnt, wt, flag);
  int wt1 = wt;
  if (flag) wt1 = -wt;
  if (cap[idx] != -1)
    ans += prob[idx] *
           f(idx + 1, cnt + 1, abs(wt1 + cap[idx]), (wt1 + cap[idx]) < 0);
  else
    ans += prob[idx] * f(idx + 1, cnt + 1, abs(wt1 - 1), (wt1 - 1) < 0);
  dp[idx][cnt][wt][flag] = ans;
  return ans;
}
int main() {
  int x;
  cin >> n >> l >> k;
  for (int i = 0; i < n; i++) {
    cin >> x;
    prob[i] = (double)x / (double)100.0;
  }
  for (int i = 0; i < n; i++) cin >> cap[i];
  double ans = f(0, 0, k, 0);
  cout << setprecision(7) << fixed << ans << endl;
  return 0;
}
