#include <bits/stdc++.h>
using namespace std;
const int maxn = 333333;
struct node {
  double bst, l, r, sum;
};
int n, m, c;
int x[maxn], p[maxn];
double prof[maxn];
node it[maxn * 4];
node an;
node unite(node a, node b) {
  node an;
  an.l = max(a.l, a.sum + b.l);
  an.r = max(a.r + b.sum, b.r);
  an.sum = b.sum + a.sum;
  an.bst = max(a.bst, max(b.bst, a.r + b.l));
  return an;
}
void build(int x, int l, int r) {
  if (l == r) {
    it[x].l = it[x].r = it[x].bst = it[x].sum = prof[l];
    return;
  }
  int mid = (l + r) >> 1;
  build(x + x, l, mid);
  build(x + x + 1, mid + 1, r);
  it[x] = unite(it[x + x], it[x + x + 1]);
}
void que(int x, int l, int r, int u, int v) {
  if (u <= l && r <= v) {
    an = unite(an, it[x]);
    return;
  }
  int mid = (l + r) >> 1;
  if (u <= mid) que(x + x, l, mid, u, v);
  if (v > mid) que(x + x + 1, mid + 1, r, u, v);
}
int main() {
  scanf("%d%d%d", &n, &m, &c);
  for (int i = 1; i <= n; ++i) scanf("%d", &x[i]);
  --n;
  for (int i = 1; i <= n; ++i) scanf("%d", &p[i]);
  for (int i = 1; i <= n; ++i) x[i] = x[i + 1] - x[i];
  for (int i = 1; i <= n; ++i) prof[i] = 0.5 * x[i] - 0.01 * p[i] * c;
  build(1, 1, n);
  double tot = 0;
  for (int i = 1; i <= m; ++i) {
    int a, b;
    scanf("%d%d", &a, &b);
    an.l = an.r = an.sum = an.bst = 0;
    que(1, 1, n, a, b - 1);
    tot += an.bst;
  }
  printf("%lf", tot);
  return 0;
}
