#include <bits/stdc++.h>
using namespace std;
const int max_n = 150000;
struct node {
  double sum, pref, suff, ans;
};
node make_node(double x) {
  node res;
  res.sum = x;
  res.pref = res.suff = res.ans = max(0.0, x);
  return res;
}
int n;
vector<double> a;
node t[4 * max_n];
node combine(node l, node r) {
  node res;
  res.ans = max(l.suff + r.pref, max(l.ans, r.ans));
  res.sum = l.sum + r.sum;
  res.pref = max(l.pref, l.sum + r.pref);
  res.suff = max(r.suff, r.sum + l.suff);
  return res;
}
void build(int v = 0, int tl = 0, int tr = n - 1) {
  if (tr == tl)
    t[v] = make_node(a[tr]);
  else {
    int m = (tl + tr) / 2;
    build(2 * v + 1, tl, m), build(2 * v + 2, m + 1, tr);
    t[v] = combine(t[2 * v + 1], t[2 * v + 2]);
  }
}
node find(int l, int r, int v = 0, int tl = 0, int tr = n - 1) {
  if (l == tl && r == tr)
    return t[v];
  else {
    int m = (tr + tl) / 2;
    if (r <= m)
      return find(l, r, 2 * v + 1, tl, m);
    else if (l > m)
      return find(l, r, 2 * v + 2, m + 1, tr);
    else
      return combine(find(l, m, 2 * v + 1, tl, m),
                     find(m + 1, r, 2 * v + 2, m + 1, tr));
  }
}
int main() {
  int m;
  double c;
  cin >> n >> m >> c;
  vector<double> x(n), p(n - 1);
  for (int i = 0; i < n; i++) cin >> x[i];
  n--;
  a.resize(n);
  for (int i = 0; i < n; i++) {
    cin >> p[i];
    a[i] = (x[i + 1] - x[i]) / 2.0 - c * p[i] / 100.0;
  }
  build();
  double res = 0.0;
  for (int i = 0; i < m; i++) {
    int l, r;
    cin >> l >> r;
    l -= 1, r -= 2;
    double ans = find(l, r).ans;
    res += ans;
  }
  cout.precision(7);
  cout << fixed << res << endl;
  return 0;
}
