#include <bits/stdc++.h>
using namespace std;
int n, m, k;
bool debug = false;
int W;
struct company {
  long long w, a, c;
  bool operator<(const company b) const { return c * b.w < b.c * w; }
} coms[500005];
int main() {
  scanf("%d%d%d", &n, &m, &W);
  for (int i = 0; i < m; i++) scanf("%I64d", &coms[i].w);
  for (int i = 0; i < m; i++) scanf("%I64d", &coms[i].c);
  for (int i = 0; i < m; i++) scanf("%I64d", &coms[i].a);
  long long zs = 0;
  double xs = 0;
  for (int i = 0; i < n; i++) {
    if (i > 0) {
      for (int j = 0; j < m; j++) {
        coms[j].c -= coms[j].a;
      }
    }
    long long tw = W;
    int l = 0, r = m - 1;
    while (l + 1 <= r) {
      int mid = (l + r) / 2;
      nth_element(coms + l, coms + mid, coms + r + 1);
      long long tmpw = 0, tmpans = 0;
      for (int j = l; j <= mid; j++) {
        tmpw += coms[j].w;
        tmpans += coms[j].c;
      }
      if (tw >= tmpw) {
        tw -= tmpw;
        zs += tmpans;
        l = mid + 1;
      } else {
        r = mid;
      }
    }
    long long last = coms[l].c * tw;
    zs += last / coms[l].w;
    xs += (last % coms[l].w) * 1.0 / coms[l].w;
    zs += (long long)xs;
    xs -= (long long)xs;
  }
  char buff[20];
  sprintf(buff, "%.15f", xs);
  printf("%I64d%s", zs, buff + 1);
  return 0;
}
