#include <bits/stdc++.h>
using namespace std;
struct H {
  int w, a, c;
  bool operator<(const H &cmp) const {
    return (long long)cmp.a * w > (long long)a * cmp.w;
  }
} hh[500001];
long long ans1;
double ans2;
void qs(int l, int r, int W) {
  if (l > r) return;
  if (l == r) {
    ans1 += ((long long)hh[l].a * W) / hh[l].w;
    ans2 += (((long long)hh[l].a * W) % hh[l].w + 0.0) / hh[l].w;
    ans1 += (long long)ans2;
    ans2 -= (long long)ans2;
    return;
  }
  H cmp = hh[l + rand() % (r - l + 1)];
  int i = l, j = r;
  long long sw = 0, sa = 0;
  while (i <= j) {
    while (hh[i] < cmp) {
      sw += hh[i].w;
      sa += hh[i].a;
      i++;
    }
    while (cmp < hh[j]) {
      j--;
    }
    if (i <= j) {
      sw += hh[j].w;
      sa += hh[j].a;
      swap(hh[i++], hh[j--]);
    }
  }
  if (sw <= W) {
    ans1 += sa;
    qs(i, r, W - sw);
  } else {
    qs(l, i - 1, W);
  }
}
int main() {
  int n, m, W;
  while (~scanf("%d%d%d", &n, &m, &W)) {
    for (int i = 0; i < m; i++) {
      scanf("%d", &hh[i].w);
    }
    for (int i = 0; i < m; i++) {
      scanf("%d", &hh[i].a);
    }
    for (int i = 0; i < m; i++) {
      scanf("%d", &hh[i].c);
    }
    ans1 = 0;
    ans2 = 0;
    for (int i = 0; i < n; i++) {
      qs(0, m - 1, W);
      for (int j = 0; j < m; j++) {
        hh[j].a -= hh[j].c;
      }
    }
    ans1 += (long long)ans2;
    ans2 -= (long long)ans2;
    printf("%I64d%.15lf\n", ans1 / 10, ans1 % 10 + ans2);
  }
  return 0;
}
