#include <bits/stdc++.h>
using namespace std;
template <class T>
T sqr(T x) {
  return x * x;
}
inline int getBit(long long x, int pos) { return ((x >> pos) & 1); }
const double eps = 1e-9;
const double pi = acos(-1.0);
const int MAXN = (int)(15e4) + 10;
const int MAXM = (int)(3e5) + 10;
struct MyStruct {
  double ans, sm, pref, suff;
  MyStruct() {
    ans = -1;
    sm = 0;
    pref = 0;
    suff = 0;
  }
  MyStruct(double ans, double sm, double pref, double suff)
      : ans(ans), sm(sm), pref(pref), suff(suff) {}
};
int n, m, c;
int x[MAXN];
double p[MAXN], diff[MAXN];
MyStruct t[4 * MAXN];
void build(int v, int tl, int tr) {
  if (tl == tr) {
    t[v].sm = diff[tl];
    t[v].pref = t[v].suff = t[v].ans = max(diff[tl], 0.0);
  } else {
    int tm = (tl + tr) / 2;
    build(v * 2 + 1, tl, tm);
    build(v * 2 + 2, tm + 1, tr);
    t[v].sm = t[v * 2 + 1].sm + t[v * 2 + 2].sm;
    t[v].pref = max(t[v * 2 + 1].pref, t[v * 2 + 1].sm + t[v * 2 + 2].pref);
    t[v].suff = max(t[v * 2 + 1].suff + t[v * 2 + 2].sm, t[v * 2 + 2].suff);
    t[v].ans = max(t[v * 2 + 1].ans, t[v * 2 + 2].ans);
    t[v].ans = max(t[v].ans, t[v * 2 + 1].suff + t[v * 2 + 2].pref);
  }
}
MyStruct getMax(int v, int tl, int tr, int lf, int rg) {
  if (lf > rg) {
    return MyStruct();
  }
  if (tl == lf && tr == rg) {
    return t[v];
  } else {
    int tm = (tl + tr) / 2;
    MyStruct m1 = getMax(v * 2 + 1, tl, tm, lf, min(tm, rg));
    MyStruct m2 = getMax(v * 2 + 2, tm + 1, tr, max(lf, tm + 1), rg);
    if (m1.ans == -1 || m2.ans == -1) return (m1.ans == -1 ? m2 : m1);
    MyStruct res = MyStruct();
    res.sm = m1.sm + m2.sm;
    res.pref = max(m1.pref, m1.sm + m2.pref);
    res.suff = max(m1.suff + m2.sm, m2.suff);
    res.ans = max(m1.ans, m2.ans);
    res.ans = max(res.ans, m1.suff + m2.pref);
    return res;
  }
}
int main() {
  scanf("%d%d%d", &n, &m, &c);
  for (int i = 0; i < n; i++) {
    scanf("%d", &x[i]);
  }
  for (int i = 0; i < n - 1; i++) {
    int X;
    scanf("%d", &X);
    p[i] = X / 100.0;
    diff[i] = 0.5 * (x[i + 1] - x[i]) - p[i] * c;
  }
  build(0, 0, n - 2);
  double ans = 0.0;
  while (m-- > 0) {
    int st, fi;
    scanf("%d%d", &st, &fi);
    --st;
    --fi;
    ans += getMax(0, 0, n - 2, st, fi - 1).ans;
  }
  printf("%.10lf\n", ans);
  return 0;
}
