#include <bits/stdc++.h>
using namespace std;
int n, m, co, pos[500005], p[500005];
struct rec {
  double ml, mr, val, sum;
  void update(rec B) {
    val = max(val, max(B.val, mr + B.ml));
    ml = max(ml, sum + B.ml);
    mr = max(B.mr, B.sum + mr);
    val = max(val, max(ml, mr));
    sum += B.sum;
  }
} E[4 * 500005], Ret;
int ll, rr;
void build(int t, int l, int r) {
  if (l == r) {
    double D = (pos[l + 1] - pos[l]) / 2.0 - (p[l] / 100.0 * co);
    if (D < 0)
      E[t] = (rec){0, 0, 0, D};
    else
      E[t] = (rec){D, D, D, D};
    return;
  }
  int mid = (l + r) >> 1;
  build(t * 2, l, mid);
  build(t * 2 + 1, mid + 1, r);
  E[t] = (rec){0, 0, 0, 0};
  E[t].update(E[t * 2]);
  E[t].update(E[t * 2 + 1]);
}
void Query(int t, int l, int r) {
  if (ll <= l && r <= rr) {
    Ret.update(E[t]);
    return;
  }
  int mid = (l + r) >> 1;
  if (ll <= mid) Query(t * 2, l, mid);
  if (rr > mid) Query(t * 2 + 1, mid + 1, r);
}
int main() {
  scanf("%d%d%d", &n, &m, &co);
  for (int i = 1; i <= n; i++) scanf("%d", &pos[i]);
  for (int i = 1; i <= n - 1; i++) scanf("%d", &p[i]);
  build(1, 1, n - 1);
  double Ans = 0;
  for (int i = 1; i <= m; i++) {
    Ret = (rec){0, 0, 0, 0};
    scanf("%d%d", &ll, &rr);
    rr--;
    Query(1, 1, n - 1);
    Ans += Ret.val;
  }
  printf("%.8lf\n", Ans);
}
