#include <bits/stdc++.h>
const double pi = acos(-1.0);
const double eps = 1e-12;
using namespace std;
struct data {
  double sum, pref, suff, ans;
};
const int N = 2e5 + 10;
int n, m, c;
int x[N], p[N];
double cost[N];
data t[4 * N];
data combine(data l, data r) {
  data res;
  res.sum = l.sum + r.sum;
  res.pref = max(l.pref, l.sum + r.pref);
  res.suff = max(r.suff, r.sum + l.suff);
  res.ans = max(l.ans, r.ans);
  res.ans = max(res.ans, l.suff + r.pref);
  return res;
}
data addData(double x) {
  data res;
  res.sum = x;
  res.pref = res.suff = res.ans = max(0.0, x);
  return res;
}
void build(int v, int tl, int tr) {
  if (tl == tr) {
    t[v] = addData(cost[tl]);
  } else {
    int tm = (tl + tr) >> 1;
    build(v * 2, tl, tm);
    build(v * 2 + 1, tm + 1, tr);
    t[v] = combine(t[v * 2], t[v * 2 + 1]);
  }
}
data query(int v, int tl, int tr, int l, int r) {
  if (l == tl && tr == r) return t[v];
  int tm = (tl + tr) >> 1;
  if (r <= tm) return query(v * 2, tl, tm, l, r);
  if (l > tm) return query(v * 2 + 1, tm + 1, tr, l, r);
  return combine(query(v * 2, tl, tm, l, tm),
                 query(v * 2 + 1, tm + 1, tr, tm + 1, r));
}
void solve() {
  cin >> n >> m >> c;
  for (int i = 1; i <= n; i++) {
    cin >> x[i];
  }
  for (int i = 1; i < n; i++) {
    cin >> p[i];
  }
  for (int i = 1; i < n; i++) {
    double res1 = p[i] * 0.01 * c;
    double res2 = (x[i + 1] - x[i]) * 0.5;
    cost[i] = res2 - res1;
  }
  build(1, 1, n - 1);
  double ans = 0;
  while (m--) {
    int a, b;
    cin >> a >> b;
    b--;
    data res = query(1, 1, n - 1, a, b);
    ans += max(0.0, res.ans);
  }
  cout << ans << endl;
}
int main() {
  ios::sync_with_stdio(NULL), cin.tie(0), cout.tie(0);
  cout.setf(ios::fixed), cout.precision(6);
  int step;
  step = 1;
  for (int i = 1; i <= step; i++) {
    solve();
  }
}
