#include <bits/stdc++.h>
using namespace std;
long long w[500500], c[500500], a[500500], to[500500];
long long lres = 0;
double dres = 0;
void change(long long n0, long long n1) { swap(to[n0], to[n1]); }
void recur(long long l, long long r, long long rem) {
  if (l + 1 == r) {
    lres += (c[to[l]] * rem) / w[to[l]];
    dres += (double)((c[to[l]] * rem) % w[to[l]]) / (double)w[to[l]];
    return;
  }
  long long child = 0, mother = 0;
  for (long long i = l; i < r; i++) child += c[to[i]], mother += w[to[i]];
  long long low = l, sum = 0, cost = 0;
  for (long long i = l; i < r; i++)
    if ((double)c[to[i]] * mother < (double)w[to[i]] * child) {
      sum += w[to[i]];
      cost += c[to[i]];
      change(low++, i);
    }
  if (rem <= sum) {
    recur(l, low, rem);
    return;
  }
  rem -= sum;
  lres += cost;
  sum = cost = 0;
  for (long long i = low; i < r; i++)
    if ((double)c[to[i]] * mother == (double)w[to[i]] * child) {
      sum += w[to[i]];
      cost += c[to[i]];
      change(low++, i);
    }
  if (rem <= sum) {
    lres += (c[to[low - 1]] * rem) / w[to[low - 1]];
    dres += (double)((c[to[low - 1]] * rem) % w[to[low - 1]]) /
            (double)w[to[low - 1]];
    return;
  }
  rem -= sum;
  lres += cost;
  recur(low, r, rem);
}
int main() {
  long long n, m, W;
  cin >> n >> m >> W;
  for (long long i = 0; i < ((long long)m); i++) to[i] = i;
  for (long long i = 0; i < ((long long)m); i++) cin >> w[i];
  for (long long i = 0; i < ((long long)m); i++) cin >> c[i];
  for (long long i = 0; i < ((long long)m); i++) cin >> a[i];
  for (long long i = 0; i < ((long long)n); i++) {
    if (i)
      for (long long i = 0; i < ((long long)m); i++) c[i] -= a[i];
    recur(0, m, W);
  }
  lres += (int)floor(dres);
  dres -= floor(dres);
  dres += lres % 10;
  lres /= 10;
  cout << lres;
  printf("%.20lf\n", dres);
}
