#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:16777216")
using namespace std;
const double eps = 1e-9;
const double pi = acos(-1.0);
const int maxn = (int)15e4 + 10;
struct node {
  double sum, ans, pref, suff;
  node() {}
  node(double x) {
    sum = x;
    ans = pref = suff = max(0.0, x);
  }
};
node t[4 * maxn];
int x[maxn], p[maxn];
double val[maxn];
node update(node a, node b) {
  node res;
  res.sum = a.sum + b.sum;
  res.pref = max(a.pref, a.sum + b.pref);
  res.suff = max(b.suff, b.sum + a.suff);
  res.ans = max(max(a.ans, b.ans), a.suff + b.pref);
  return res;
}
void build(int l, int r, int idx) {
  if (l == r) {
    t[idx] = node(val[l]);
  } else {
    int mid = (l + r) >> 1;
    build(l, mid, 2 * idx);
    build(mid + 1, r, 2 * idx + 1);
    t[idx] = update(t[2 * idx], t[2 * idx + 1]);
  }
}
node get(int l, int r, int a, int b, int idx) {
  if (a <= l && r <= b) {
    return t[idx];
  } else {
    int mid = (l + r) >> 1;
    if (b <= mid) return get(l, mid, a, b, 2 * idx);
    if (mid + 1 <= a) return get(mid + 1, r, a, b, 2 * idx + 1);
    return update(get(l, mid, a, mid, 2 * idx),
                  get(mid + 1, r, mid + 1, b, 2 * idx + 1));
  }
}
int main() {
  int n, m, a, b, c;
  cin >> 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++)
    val[i] = (x[i + 1] - x[i]) / 2.0 - (p[i] / 100.0) * c;
  build(0, n - 2, 1);
  double res = 0.0;
  for (int i = 0; i < m; i++) {
    scanf("%d%d", &a, &b);
    --a;
    --b;
    res += get(0, n - 2, a, b - 1, 1).ans;
  }
  printf("%.9lf\n", res);
  return 0;
}
