#include <bits/stdc++.h>
using namespace std;
int const N = 3e5 + 5;
int n, m, c, a[N], p[N], cnt;
double t[N * 4][4], b[N], pa[N * 4][4];
double ans;
void bu(int v, int l, int r) {
  if (l == r) {
    t[v][0] = t[v][1] = t[v][2] = t[v][3] = b[l];
  } else {
    int m = (l + r) / 2;
    bu(2 * v + 1, l, m);
    bu(2 * v + 2, m + 1, r);
    t[v][0] = max(t[v * 2 + 1][2] + t[v * 2 + 2][1],
                  max(t[v * 2 + 1][0], t[v * 2 + 2][0]));
    t[v][1] = max(t[v * 2 + 1][3] + t[v * 2 + 2][1], t[v * 2 + 1][1]);
    t[v][2] = max(t[v * 2 + 2][2], t[v * 2 + 2][3] + t[v * 2 + 1][2]);
    t[v][3] = t[v * 2 + 1][3] + t[v * 2 + 2][3];
  }
}
void get(int v, int fl, int tr, int l, int r) {
  if (l > r) {
    pa[v][0] = pa[v][1] = pa[v][2] = pa[v][3] = 0.0;
    return;
  }
  if (fl == l && tr == r) {
    pa[v][0] = t[v][0];
    pa[v][1] = t[v][1];
    pa[v][2] = t[v][2];
    pa[v][3] = t[v][3];
  } else {
    int m = (fl + tr) / 2;
    get(v * 2 + 1, fl, m, l, min(m, r));
    get(v * 2 + 2, m + 1, tr, max(m + 1, l), r);
    pa[v][0] = max(pa[v * 2 + 1][2] + pa[v * 2 + 2][1],
                   max(pa[v * 2 + 1][0], pa[v * 2 + 2][0]));
    pa[v][1] = max(pa[v * 2 + 1][3] + pa[v * 2 + 2][1], pa[v * 2 + 1][1]);
    pa[v][2] = max(pa[v * 2 + 2][2], pa[v * 2 + 2][3] + pa[v * 2 + 1][2]);
    pa[v][3] = pa[v * 2 + 1][3] + pa[v * 2 + 2][3];
  }
}
int main() {
  scanf("%d%d%d", &n, &m, &c);
  for (int i = 0; i < n; ++i) scanf("%d", &a[i]);
  for (int i = 0; i < n - 1; ++i) scanf("%d", &p[i]);
  for (int i = 0; i < n - 1; ++i)
    b[i] = p[i] * 1.0 * ((a[i + 1] - a[i]) / 2.0 - c) +
           (100.0 - p[i]) * ((a[i + 1] - a[i]) / 2.0);
  bu(0, 0, n - 2);
  for (int i = 0; i < m; ++i) {
    int f, s;
    scanf("%d%d", &f, &s);
    --f;
    --s;
    --s;
    get(0, 0, n - 2, f, s);
    ans += max(0.0, max(pa[0][0], max(pa[0][1], max(pa[0][2], pa[0][3]))));
  }
  printf("%.15lf", ans / 100.0);
  return 0;
}
