#include <bits/stdc++.h>
int N, M, C;
int X[150001];
int P[150001];
long long S[150001];
int STNode_R;
struct STNode {
  long long mi;
  long long ml;
  long long mr;
  long long h;
};
struct STQueryResult {
  long long vi;
  long long vl;
  long long vr;
  long long vh;
};
long long max(long long a, long long b) { return a > b ? a : b; }
STNode ST[600000];
STNode* buildSTree(int i, int l, int r) {
  STNode* cur = &ST[i];
  if (l == r) {
    cur->mi = cur->ml = cur->mr = cur->h = S[l + 1] - S[l];
  } else {
    int m = (l + r) / 2;
    STNode* ls = buildSTree(i * 2, l, m);
    STNode* rs = buildSTree(i * 2 + 1, m + 1, r);
    cur->mi = max(max(ls->mi, rs->mi), ls->mr + rs->ml);
    cur->ml = max(ls->ml, ls->h + rs->ml);
    cur->mr = max(rs->mr, rs->h + ls->mr);
    cur->h = ls->h + rs->h;
  }
  return cur;
}
void buildSTree() {
  int r = 1;
  while (r < N) r *= 2;
  buildSTree(1, 0, r - 1);
  STNode_R = r - 1;
}
STQueryResult querySTree(int i, int ql, int qr, int sl, int sr) {
  STQueryResult res = {0, 0, 0, 0};
  if (sr < ql) return res;
  if (qr < sl) return res;
  if (ql <= sl && sr <= qr) {
    res.vi = ST[i].mi;
    res.vl = ST[i].ml;
    res.vr = ST[i].mr;
    res.vh = ST[i].h;
  } else {
    int m = (sl + sr) / 2;
    STQueryResult r1 = querySTree(i * 2, ql, qr, sl, m);
    STQueryResult r2 = querySTree(i * 2 + 1, ql, qr, m + 1, sr);
    res.vi = max(max(r1.vi, r2.vi), r1.vr + r2.vl);
    res.vl = max(r1.vl, r1.vh + r2.vl);
    res.vr = max(r2.vr, r2.vh + r1.vr);
    res.vh = r1.vh + r2.vh;
  }
  return res;
}
long long querySTree(int l, int r) {
  STQueryResult res = querySTree(1, l, r - 1, 0, STNode_R);
  return max(0, max(max(res.vi, res.vh), max(res.vl, res.vr)));
}
int main() {
  scanf("%d%d%d", &N, &M, &C);
  for (int i = 0; i < N; ++i) scanf("%d", &X[i]);
  for (int i = 0; i < N - 1; ++i) scanf("%d", &P[i]);
  for (int i = 1; i < N; ++i) {
    int dist = X[i] - X[i - 1];
    long long v = 50ll * dist - 1ll * P[i - 1] * C;
    S[i] = S[i - 1] + v;
  }
  buildSTree();
  long long ans = 0;
  for (int i = 0; i < M; ++i) {
    int a, b;
    scanf("%d%d", &a, &b);
    long long res = querySTree(a - 1, b - 1);
    ans += res;
  }
  printf("%lf\n", ans / 100.0);
  return 0;
}
