#include <bits/stdc++.h>
using namespace std;
long long w[500010], put[500010];
long long c[500010], a[500010], s[500010];
long long wei[310];
int r[500010];
long long zs;
bool cmp(int x, int y) { return s[x] * w[y] < s[y] * w[x]; }
double ANS;
void gao(long long a, long long b) {
  ANS += a * 1.0 / b;
  if (ANS > 1) {
    zs += (long long)ANS;
    ANS -= (long long)ANS;
  }
}
void solve(long long total, int l, int r) {
  if (total <= 0) return;
  if (l > r) return;
  if (l == r) {
    if (total < w[l])
      put[l] = total * s[l];
    else
      put[l] = w[l] * s[l];
    return;
  }
  int left = l, right = r, mid = (l + r) / 2;
  long long idw = w[mid], ids = s[mid];
  while (left <= right) {
    while (left <= right && s[left] * idw < ids * w[left]) left++;
    while (left <= right && s[right] * idw > ids * w[right]) right--;
    if (left <= right) {
      swap(s[left], s[right]);
      swap(w[left], w[right]);
      swap(a[left], a[right]);
      swap(c[left], c[right]);
      swap(put[left], put[right]);
      left++;
      right--;
    }
  }
  long long wei = 0;
  for (int i = l; i <= right; i++) wei += w[i];
  if (wei < total) {
    for (int i = l; i <= right; i++) put[i] = w[i] * s[i];
    long long twei = 0;
    for (int i = right + 1; i < left; i++) twei += w[i];
    if (twei + wei < total) {
      for (int i = right + 1; i < left; i++) put[i] = w[i] * s[i];
      solve(total - wei - twei, left, r);
    } else {
      total -= wei;
      for (int i = right + 1; i < left; i++) {
        if (w[i] < total) {
          put[i] = w[i] * s[i];
          total -= w[i];
        } else {
          put[i] = total * s[i];
          total = 0;
        }
      }
    }
  } else
    solve(total, l, right);
}
int main() {
  int n, m;
  long long W;
  while (scanf("%d%d%I64d", &n, &m, &W) == 3) {
    for (int i = 0; i < m; i++) scanf("%I64d", &w[i]);
    for (int i = 0; i < m; i++) scanf("%I64d", &c[i]);
    for (int i = 0; i < m; i++) scanf("%I64d", &a[i]);
    memset(put, 0, sizeof(put));
    memset(wei, 0, sizeof(wei));
    double ans = 0;
    zs = 0;
    long long xs = 0;
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < m; j++) s[j] = c[j] - i * a[j];
      memset(put, 0, sizeof(put));
      solve(W, 0, m - 1);
      for (int j = 0; j < m; j++) {
        zs += put[j] / w[j];
        put[j] %= w[j];
        gao(put[j], w[j]);
      }
    }
    printf("%I64d", zs / 10);
    printf("%.15f", ANS + zs % 10);
    printf("\n");
  }
  return 0;
}
