#include <bits/stdc++.h>
using namespace std;
int n, m, fine;
int x[150005], p[1500005], on[300005], off[300005];
double a[150005];
struct node {
  int on, off;
} pass[300005];
struct Node {
  int l, r;
  double sum_l, sum_r, sum_all, sum_ans;
} tre[150005 * 4];
void build(int id, int l, int r) {
  tre[id].l = l;
  tre[id].r = r;
  if (l == r) {
    tre[id].sum_l = a[l];
    tre[id].sum_r = a[l];
    tre[id].sum_all = a[l];
    tre[id].sum_ans = a[l];
    return;
  }
  build((id << 1), l, ((l + r) / 2));
  build(((id << 1) + 1), ((l + r) / 2) + 1, r);
  tre[id].sum_l = max(tre[(id << 1)].sum_l,
                      tre[(id << 1)].sum_all + tre[((id << 1) + 1)].sum_l);
  tre[id].sum_r = max(tre[((id << 1) + 1)].sum_r,
                      tre[((id << 1) + 1)].sum_all + tre[(id << 1)].sum_r);
  tre[id].sum_ans =
      max(max(tre[(id << 1)].sum_ans, tre[((id << 1) + 1)].sum_ans),
          tre[(id << 1)].sum_r + tre[((id << 1) + 1)].sum_l);
  tre[id].sum_all = tre[(id << 1)].sum_all + tre[((id << 1) + 1)].sum_all;
}
Node query(int id, int ql, int qr) {
  if (ql == tre[id].l && tre[id].r == qr) {
    return tre[id];
  }
  int l = tre[id].l, r = tre[id].r;
  if (qr <= ((l + r) / 2)) return query((id << 1), ql, qr);
  if (ql > ((l + r) / 2)) return query(((id << 1) + 1), ql, qr);
  Node New_l = query((id << 1), ql, ((l + r) / 2));
  Node New_r = query(((id << 1) + 1), ((l + r) / 2) + 1, qr);
  Node res;
  res.sum_l = max(New_l.sum_l, New_l.sum_all + New_r.sum_l);
  res.sum_r = max(New_r.sum_r, New_r.sum_all + New_l.sum_r);
  res.sum_all = New_l.sum_all + New_r.sum_all;
  res.sum_ans =
      max(max(New_l.sum_ans, New_r.sum_ans), New_l.sum_r + New_r.sum_l);
  return res;
}
int main() {
  scanf("%d%d%d", &n, &m, &fine);
  for (int i = 1; i <= n; i++) scanf("%d", &x[i]);
  for (int i = 1; i < n; i++) scanf("%d", &p[i]);
  for (int i = 1; i <= m; i++) scanf("%d%d", &pass[i].on, &pass[i].off);
  double ans = 0;
  for (int i = 1; i < n; i++) {
    a[i + 1] = 1.0 * (x[i + 1] - x[i]) / 2.0 - 1.0 * p[i] / 100.0 * fine;
  }
  build(1, 1, n);
  for (int i = 1; i <= m; i++) {
    double res = query(1, pass[i].on + 1, pass[i].off).sum_ans;
    ans += max(res, 0.0);
  }
  printf("%.9f\n", ans);
  return 0;
}
