#include <bits/stdc++.h>
using namespace std;
using LL = long long;
constexpr int N = 150005;
double x[N], ex[N];
array<double, 4> seg[4 * N];
array<double, 4> merge(const array<double, 4> &l, const array<double, 4> &r) {
  array<double, 4> rv;
  rv[0] = l[0] + r[0];
  rv[1] = max(l[1], l[0] + r[1]);
  rv[2] = max(r[2], r[0] + l[2]);
  rv[3] = max({l[3], r[3], l[2] + r[1]});
  return rv;
}
void build(int at, int b, int e) {
  if (b == e) {
    seg[at][0] = ex[b];
    seg[at][1] = seg[at][2] = seg[at][3] = max(0., ex[b]);
    return;
  }
  build(at * 2, b, ((b + e) / 2));
  build(at * 2 + 1, ((b + e) / 2) + 1, e);
  seg[at] = merge(seg[at * 2], seg[at * 2 + 1]);
}
array<double, 4> query(int at, int b, int e, int l, int r) {
  if (e < l or r < b) return array<double, 4>();
  if (l <= b and e <= r) {
    return seg[at];
  }
  auto q1 = query(at * 2, b, ((b + e) / 2), l, r);
  auto q2 = query(at * 2 + 1, ((b + e) / 2) + 1, e, l, r);
  return merge(q1, q2);
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  int n, m, c;
  cin >> n >> m >> c;
  for (int i = 1; i <= n; i++) cin >> x[i];
  for (int i = 1; i < n; i++) {
    double p;
    cin >> p;
    ex[i] = (x[i + 1] - x[i]) * .5 - p * c / 100.0;
  }
  build(1, 1, n - 1);
  double result = 0;
  while (m--) {
    int l, r;
    cin >> l >> r;
    auto res = query(1, 1, n - 1, l, r - 1);
    result += res[3];
  }
  cout << setprecision(10) << result << endl;
}
