#include <bits/stdc++.h>
using namespace std;
const int N = 150005;
int n, m, c;
long long xx[N], p[N];
struct Sum {
  long long l, r, w, sum;
  Sum() {}
  Sum(long long x) {
    l = r = w = max(0LL, x);
    sum = x;
  }
};
Sum meg(Sum a, Sum b) {
  Sum ans;
  ans.w = max(max(a.w, b.w), a.r + b.l);
  ans.l = max(a.l, a.sum + b.l);
  ans.r = max(b.r, b.sum + a.r);
  ans.sum = (a.sum + b.sum);
  return ans;
}
struct Node {
  Sum s;
} node[N << 2];
void pushup(int x) {
  node[x].s = meg(node[(x << 1)].s, node[((x << 1) | 1)].s);
}
void build(int L, int R, int x = 1) {
  if (L == R) {
    node[x].s = Sum(xx[L]);
    return;
  }
  int mid = (L + R) >> 1;
  build(L, mid, (x << 1));
  build(mid + 1, R, ((x << 1) | 1));
  pushup(x);
}
Sum get(int l, int r, int L, int R, int x = 1) {
  if (L >= l && R <= r) return node[x].s;
  int mid = (L + R) >> 1;
  if (l <= mid && r > mid)
    return meg(get(l, r, L, mid, (x << 1)),
               get(l, r, mid + 1, R, ((x << 1) | 1)));
  else if (l <= mid)
    return get(l, r, L, mid, (x << 1));
  else if (r > mid)
    return get(l, r, mid + 1, R, ((x << 1) | 1));
}
int main() {
  scanf("%d%d%d", &n, &m, &c);
  for (int i = 1; i <= n; i++) scanf("%lld", &xx[i]);
  for (int i = 1; i <= n - 1; i++) scanf("%d", &p[i]);
  for (int i = 1; i < n; i++) {
    xx[i] =
        (xx[i + 1] - xx[i] - c * 2) * p[i] + (xx[i + 1] - xx[i]) * (100 - p[i]);
  }
  build(1, n - 1);
  int l, r;
  long long ans = 0;
  for (int i = 0; i < m; i++) {
    scanf("%d%d", &l, &r);
    ans += get(l, r - 1, 1, n - 1).w;
  }
  printf("%.12f\n", ans / 200.0);
  return 0;
}
