#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:16777216")
using namespace std;
struct firm {
  int w, c, a;
  long double cc, ca;
};
int a, b, c, d, i, j, n, m, k, w;
char str[(1 << 17) + 1], *cc = str;
long long cel;
long double dr;
inline char next_char() {
  if (*cc == 0) {
    fread(str, sizeof(char), 1 << 17, stdin);
    cc = str;
  }
  return *(cc++);
}
inline int next_int() {
  static int ans;
  static char ch;
  ans = 0;
  while ((ch = next_char()) < '0' || ch > '9')
    ;
  ans = ch - '0';
  while ((ch = next_char()) >= '0' && ch <= '9') ans = ans * 10 + ch - '0';
  return ans;
}
firm mas[500001];
inline bool cmp_c(const firm &a, const firm &b) {
  return (long long)a.c * b.w < (long long)b.c * a.w;
}
inline bool cmp_a(const firm &a, const firm &b) {
  return (long long)a.a * b.w > (long long)b.a * a.w;
}
inline bool cmp_cc(const firm &a, const firm &b) { return a.cc + 1e-9 < b.cc; }
void quick_sort(firm *l, firm *r, int w) {
  if (r <= l + 1) return;
  firm *xx = l + (r - l) / 2;
  nth_element(l, xx, r, cmp_c);
  int sum = 0;
  for (firm *it = l; it != xx; ++it) {
    sum += it->w;
    if (sum >= w) break;
  }
  if (sum >= w)
    quick_sort(l, xx, w);
  else
    quick_sort(xx, r, w - sum);
}
int main() {
  n = next_int();
  m = next_int();
  w = next_int();
  for (int _n((m)-1), i(0); i <= _n; i++) mas[i].w = next_int();
  for (int _n((m)-1), i(0); i <= _n; i++) mas[i].c = next_int();
  for (int _n((m)-1), i(0); i <= _n; i++) mas[i].a = next_int();
  sort(mas, mas + m, cmp_c);
  for (int _n((m)-1), i(0); i <= _n; i++) {
    mas[i].cc = (long double)mas[i].c / mas[i].w;
    mas[i].ca = (long double)mas[i].a / mas[i].w;
  }
  for (int _n((n)-1), h(0); h <= _n; h++) {
    int need = w;
    for (int _n((m)-1), i(0); i <= _n; i++) {
      if (need >= mas[i].w) {
        need -= mas[i].w;
        cel += mas[i].c;
        if (!need) break;
      } else {
        long long ch = (long long)mas[i].c * need;
        long long o = ch / mas[i].w;
        cel += o;
        ch -= o * mas[i].w;
        dr += (long double)ch / mas[i].w;
        break;
      }
    }
    for (int _n((m)-1), i(0); i <= _n; i++)
      mas[i].c -= mas[i].a, mas[i].cc -= mas[i].ca;
    quick_sort(mas, mas + m, w);
  }
  cel += (long long)floor(dr);
  dr -= floor(dr);
  if (dr < 0) dr += 1.0;
  sprintf(str, "%.12lf", (double)dr);
  if (str[0] == '1') ++cel;
  ostringstream oss;
  oss << cel;
  printf("%s%s\n", oss.str().c_str(), str + 1);
}
