#include <bits/stdc++.h>
typedef struct {
  long long s, l, r, m;
} value;
long long maxll(long long a, long long b) { return a > b ? a : b; }
void sum(value *v, value *l, value *r) {
  v->s = l->s + r->s;
  v->l = maxll(l->l, l->s + r->l);
  v->r = maxll(r->r, r->s + l->r);
  v->m = maxll(l->r + r->l, maxll(l->m, r->m));
}
value t[4 * 150000];
long long a[150000];
void build(int i, int l, int r) {
  if (l == r) {
    t[i].s = a[l];
    t[i].l = t[i].r = t[i].m = maxll(a[l], 0);
  } else {
    int m = (l + r) / 2;
    build(2 * i + 1, l, m);
    build(2 * i + 2, m + 1, r);
    sum(&t[i], &t[2 * i + 1], &t[2 * i + 2]);
  }
}
value get(int ll, int rr, int i, int l, int r) {
  if (rr < l || r < ll) {
    value v = {0, 0, 0, 0};
    return v;
  }
  if (ll <= l && r <= rr) return t[i];
  int m = (l + r) / 2;
  value lv, rv, av;
  lv = get(ll, rr, 2 * i + 1, l, m);
  rv = get(ll, rr, 2 * i + 2, m + 1, r);
  sum(&av, &lv, &rv);
  return av;
}
int main() {
  int n, m, c;
  scanf("%d%d%d", &n, &m, &c);
  int i, x[150000];
  for (i = 0; i < n; i++) scanf("%d", &x[i]);
  int p[150000];
  for (i = 0; i < n - 1; i++) scanf("%d", &p[i]);
  for (i = 0; i < n - 1; i++) a[i] = 1LL * (x[i + 1] - x[i]) * 50 - c * p[i];
  build(0, 0, n - 2);
  long long s = 0;
  for (i = 0; i < m; i++) {
    int l, r;
    scanf("%d%d", &l, &r);
    l--;
    r--;
    r--;
    s += get(l, r, 0, 0, n - 2).m;
  }
  printf("%.2lf\n", 1. * s / 100);
  return 0;
}
