#include <bits/stdc++.h>
using namespace std;
struct arr {
  double l, r, v, s;
  arr() { l = r = v = s = 0; }
} f[1000008];
int n, m, c, x[1000008], p[1000008], size;
inline void Merge(arr &a, arr b, arr c) {
  a.v = (b.v > c.v ? b.v : c.v);
  a.v = (a.v > b.r + c.l ? a.v : b.r + c.l);
  a.s = b.s + c.s;
  a.l = (b.l > b.s + c.l ? b.l : b.s + c.l);
  a.r = (c.r > c.s + b.r ? c.r : c.s + b.r);
}
inline double Ask(int l, int r) {
  l = l + size - 1;
  r = r + size + 1;
  arr ansl, ansr;
  while (l ^ r ^ 1) {
    if (r & 1) Merge(ansr, f[r ^ 1], ansr);
    if (l & 1 ^ 1) Merge(ansl, ansl, f[l ^ 1]);
    l >>= 1;
    r >>= 1;
  }
  Merge(ansl, ansl, ansr);
  return ansl.v;
}
int main() {
  scanf("%d%d%d", &n, &m, &c);
  for (int i = 0; i <= n - 1; i++) scanf("%d", &x[i]);
  for (int i = 1; i <= n - 1; i++) scanf("%d", &p[i]);
  n--;
  size = 1;
  while (n + 2 > size) size <<= 1;
  for (int i = 1; i <= n; i++)
    f[size + i].v = (x[i] - x[i - 1]) / 2.0 - c * p[i] / 100.0,
             f[size + i].s = f[size + i].l = f[size + i].r = f[size + i].v;
  for (int i = size - 1; i >= 1; i--) Merge(f[i], f[i << 1], f[i << 1 ^ 1]);
  double ans = 0;
  int l, r;
  for (int i = 1; i <= m; i++) {
    scanf("%d%d", &l, &r);
    ans += Ask(l, r - 1);
  }
  printf("%lf\n", ans);
  return 0;
}
