#include <bits/stdc++.h>
using namespace std;
const int N = 150010;
struct tree {
  int lt, rt;
  double sum, max, lmax, rmax;
} a[N * 4];
double p[N];
int X[N], c[N], b[N], dis[N], r;
int lowbit(int x) { return x & (-x); }
void insert(int x, int y) {
  for (int i = x; i < N; i += lowbit(i)) c[i] += y;
}
int query(int x) {
  int ans = 0;
  for (int i = x; i > 0; i -= lowbit(i)) ans += c[i];
  return ans;
}
void init(int lt, int rt, int step) {
  a[step].lt = lt;
  a[step].rt = rt;
  a[step].max = a[step].sum = a[step].lmax = a[step].rmax = 0;
  if (lt == rt) {
    a[step].sum = 0.5 * dis[lt] * b[lt] - 1.0 * b[lt] * r * p[lt];
    a[step].max = a[step].lmax = a[step].rmax = max(0.0, a[step].sum);
    return;
  }
  int mid = (lt + rt) / 2;
  init(lt, mid, 2 * step);
  init(mid + 1, rt, 2 * step + 1);
  a[step].max = max(a[2 * step].max, a[2 * step + 1].max);
  a[step].max = max(a[step].max, a[2 * step].rmax + a[2 * step + 1].lmax);
  a[step].lmax = max(a[2 * step].lmax, a[2 * step].sum + a[2 * step + 1].lmax);
  a[step].rmax =
      max(a[2 * step + 1].rmax, a[2 * step + 1].sum + a[2 * step].rmax);
  a[step].sum = a[2 * step].sum + a[2 * step + 1].sum;
}
double query(int lt, int rt, int step, double &lmax, double &rmax,
             double &sum) {
  if (a[step].lt == lt && a[step].rt == rt) {
    lmax = a[step].lmax;
    rmax = a[step].rmax;
    sum = a[step].sum;
    return a[step].max;
  }
  if (rt <= a[2 * step].rt) return query(lt, rt, 2 * step, lmax, rmax, sum);
  if (lt > a[2 * step].rt) return query(lt, rt, 2 * step + 1, lmax, rmax, sum);
  double l1, l2, r1, r2, sum1, sum2;
  double x = query(lt, a[2 * step].rt, 2 * step, l1, r1, sum1);
  double y = query(a[2 * step + 1].lt, rt, 2 * step + 1, l2, r2, sum2);
  lmax = max(l1, sum1 + l2);
  rmax = max(r2, sum2 + r1);
  sum = sum1 + sum2;
  return max(max(x, y), r1 + l2);
}
int main() {
  int n, m;
  scanf("%d%d%d", &n, &m, &r);
  for (int i = 1; i <= n; i++) scanf("%d", &X[i]);
  for (int i = 2; i <= n; i++) {
    scanf("%lf", &p[0]);
    p[i] = p[0] / 100.0;
  }
  int x, y;
  for (int i = 2; i <= n; i++) {
    b[i] = 1;
    dis[i] = X[i] - X[i - 1];
  }
  init(2, n, 1);
  double l, r, ss;
  double ans = 0;
  while (m--) {
    scanf("%d%d", &x, &y);
    ans += query(x + 1, y, 1, l, r, ss);
  }
  printf("%.20lf\n", ans);
  return 0;
}
