#include <bits/stdc++.h>
using namespace std;
const int maxn = 150000;
class node {
 public:
  long long s, lm, rm, m;
  void update(const node &l, const node &r) {
    s = l.s + r.s;
    lm = max(l.lm, l.s + r.lm);
    rm = max(r.rm, r.s + l.rm);
    m = max(max(l.m, r.m), l.rm + r.lm);
  }
} t[maxn * 4];
int x[maxn], p[maxn];
void build(int x, int l, int r) {
  if (l == r) {
    t[x].s = t[x].lm = t[x].rm = t[x].m = p[l];
    return;
  }
  int m = l + r >> 1;
  build(x << 1, l, m);
  build(x << 1 | 1, m + 1, r);
  t[x].update(t[x << 1], t[x << 1 | 1]);
}
node ask(int x, int l, int r, int a, int b) {
  if (a <= l && r <= b) return t[x];
  int m = l + r >> 1;
  if (b <= m) return ask(x << 1, l, m, a, b);
  if (a > m) return ask(x << 1 | 1, m + 1, r, a, b);
  node ret;
  ret.update(ask(x << 1, l, m, a, b), ask(x << 1 | 1, m + 1, r, a, b));
  return ret;
}
int main() {
  int i, a, b, c, n, m;
  long long w = 0;
  scanf("%d%d%d", &n, &m, &c);
  for (i = 1; i <= n; ++i) scanf("%d", x + i);
  for (i = 1; i < n; ++i) scanf("%d", p + i);
  for (i = 1; i < n; ++i) p[i] = (x[i + 1] - x[i]) * 50 - p[i] * c;
  build(1, 1, n - 1);
  for (i = 1; i <= m; ++i) {
    scanf("%d%d", &a, &b);
    w += max(0ll, ask(1, 1, n - 1, a, b - 1).m);
  }
  printf("%.9lf\n", double(w) / 100);
  return 0;
}
