#include <bits/stdc++.h>
using namespace std;
int N, M, C;
int x[200000];
int p[200000];
long long d[200000];
struct st {
  long long c, l, r, s;
  st() { c = l = r = s = 0; }
};
st operator+(const st &a, const st &b) {
  st t;
  t.c = max(max(a.c, b.c), a.r + b.l);
  t.l = max(a.l, a.s + b.l);
  t.r = max(b.r, a.r + b.s);
  t.s = a.s + b.s;
  return t;
}
st seg[1000000];
void init(int i, int a, int b) {
  if (a + 1 == b) {
    seg[i].c = seg[i].l = seg[i].r = max(d[a], 0ll);
    seg[i].s = d[a];
    return;
  }
  int m = (a + b) / 2;
  init(2 * i + 1, a, m);
  init(2 * i + 2, m, b);
  seg[i] = seg[2 * i + 1] + seg[2 * i + 2];
  long long ch = 0, mh = 0, cr = 0, cl = 0;
  for (int t = a; t < b; t++) {
    ch += d[t];
    cr = max(cr, ch - mh);
    cl = max(cl, ch);
    mh = min(mh, ch);
  }
}
st query(int i, int a, int b, int r, int s) {
  if (r <= a && b <= s) return seg[i];
  if (s <= a || r >= b) return st();
  int m = (a + b) / 2;
  return query(2 * i + 1, a, m, r, s) + query(2 * i + 2, m, b, r, s);
}
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 = (0); i < (N - 1); i++)
    d[i] = 50ll * (x[i + 1] - x[i]) - p[i] * C;
  init(0, 0, N - 1);
  long long res = 0;
  for (int i = (0); i < (M); i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    res += query(0, 0, N - 1, a - 1, b - 1).c;
  }
  printf("%.9f\n", 0.01 * res);
  return 0;
}
