#include <bits/stdc++.h>
using namespace std;
const int MAXN = 500010;
int c[MAXN], w[MAXN], a[MAXN];
int n, m, W;
long long al;
double ar;
void init() {
  scanf("%d%d%d", &n, &m, &W);
  for (int i = 0; i < m; ++i) scanf("%d", w + i);
  for (int i = 0; i < m; ++i) scanf("%d", c + i);
  for (int i = 0; i < m; ++i) scanf("%d", a + i);
}
inline int cmp(int i, int j) {
  long long tmp = (long long)c[i] * w[j] - (long long)c[j] * w[i];
  if (tmp == 0) return 0;
  return tmp < 0 ? -1 : 1;
}
void cal(int l, int r, int W) {
  if (l == r) {
    al += (long long)W * c[l] / w[l];
    ar += (double)((long long)W * c[l] % w[l]) / w[l];
    al += (long long)(ar);
    ar -= (long long)(ar);
    return;
  }
  int mid = (l + r) / 2;
  swap(w[l], w[mid]);
  swap(a[l], a[mid]);
  swap(c[l], c[mid]);
  int pt = l + 1;
  for (int i = l + 1; i <= r; ++i)
    if (cmp(i, l) < 0) {
      swap(w[pt], w[i]);
      swap(c[pt], c[i]);
      swap(a[pt], a[i]);
      ++pt;
    }
  long long wtot = 0, ctot = 0;
  int k;
  for (k = l + 1; k < pt; ++k) {
    wtot += w[k];
    ctot += c[k];
    if (wtot > W) break;
  }
  if (wtot > W) {
    cal(l + 1, pt - 1, W);
    return;
  }
  if (wtot + w[l] <= W) {
    al += ctot + c[l];
    W -= wtot + w[l];
    if (W) cal(pt, r, W);
  } else {
    al += ctot;
    al += (long long)(W - wtot) * c[l] / w[l];
    ar += (double)((long long)(W - wtot) * c[l] % w[l]) / w[l];
    al += (long long)(ar);
    ar -= (long long)(ar);
  }
}
void solve() {
  al = ar = 0.0;
  for (int i = 0; i < n; ++i) {
    cal(0, m - 1, W);
    for (int j = 0; j < m; ++j) c[j] -= a[j];
  }
  al += (long long)(ar);
  ar -= (long long)(ar);
  ar += al % 10;
  al /= 10;
  if (al != 0) printf("%I64d", al);
  printf("%.20lf\n", ar);
}
int main() {
  init();
  solve();
  return 0;
}
