#include <bits/stdc++.h>
using namespace std;
int xs[300010];
double ps[300010];
int cost;
struct seg_t {
  double mid;
  double left;
  double right;
  double all;
};
seg_t ss[540000];
int N;
seg_t& construct(int i, int bg, int ed) {
  seg_t& s = ss[i];
  if (ed - bg == 1) {
    double tmp = (xs[bg + 1] - xs[bg]) / 2.0 - cost * ps[bg];
    s.all = tmp;
    tmp = max(tmp, 0.0);
    s.mid = s.left = s.right = tmp;
  } else {
    seg_t& ls = construct(i * 2 + 1, bg, (bg + ed) / 2);
    seg_t& rs = construct(i * 2 + 2, (bg + ed) / 2, ed);
    s.all = ls.all + rs.all;
    s.left = max(ls.all + rs.left, ls.left);
    s.right = max(ls.right + rs.all, rs.right);
    s.mid = max(max(ls.mid, rs.mid), ls.right + rs.left);
  }
  return s;
}
double solveR(int p, int a, int bg, int ed) {
  int md = bg + ed >> 1;
  if (a == bg) return ss[p].right;
  if (md <= a) return solveR(p * 2 + 2, a, md, ed);
  return max(ss[p * 2 + 2].right,
             ss[p * 2 + 2].all + solveR(p * 2 + 1, a, bg, md));
}
double solveL(int p, int b, int bg, int ed) {
  int md = bg + ed >> 1;
  if (b == ed) return ss[p].left;
  if (b <= md) return solveL(p * 2 + 1, b, bg, md);
  return max(ss[p * 2 + 1].left,
             ss[p * 2 + 1].all + solveL(p * 2 + 2, b, md, ed));
}
double solve(int p, int a, int b, int bg, int ed) {
  int md = bg + ed >> 1;
  if (a == bg && b == ed) return ss[p].mid;
  if (b <= md) return solve(p * 2 + 1, a, b, bg, md);
  if (md <= a) return solve(p * 2 + 2, a, b, md, ed);
  double res = solve(p * 2 + 1, a, md, bg, md);
  res = max(res, solve(p * 2 + 2, md, b, md, ed));
  res = max(res, solveR(p * 2 + 1, a, bg, md) + solveL(p * 2 + 2, b, md, ed));
  return res;
}
int main(void) {
  int n, nQuery;
  scanf("%d%d%d", &n, &nQuery, &cost);
  for (int i = 0; i < (int)(n); ++i) {
    scanf("%d", xs + i);
  }
  for (int i = 0; i < (int)(n - 1); ++i) {
    scanf("%lf", ps + i);
    ps[i] /= 100.0;
  }
  for (N = 1; N < n; N *= 2)
    ;
  for (int i = n; i <= N; ++i) xs[i] = xs[n - 1];
  construct(0, 0, N);
  double res = 0;
  for (int i = 0; i < (int)(nQuery); ++i) {
    int a, b;
    scanf("%d%d", &a, &b);
    double tmp = solve(0, a - 1, b - 1, 0, N);
    res += tmp;
  }
  printf("%.7f\n", res);
  return 0;
}
