#include <bits/stdc++.h>
using namespace std;
double F[150000], P[150000];
double Fmn[4 * 150000 + 1], Fmx[4 * 150000 + 1], Fans[4 * 150000 + 1];
int x[150000], p[150000];
void build(int node, int l, int r) {
  if (l == r) {
    Fmn[node] = Fmx[node] = F[l];
    Fans[node] = 0;
  } else {
    int mi = (l + r) >> 1;
    build((node << 1), l, mi);
    build((node << 1) ^ 1, mi + 1, r);
    Fmn[node] = min(Fmn[(node << 1)], Fmn[(node << 1) ^ 1]);
    Fmx[node] = max(Fmx[(node << 1)], Fmx[(node << 1) ^ 1]);
    Fans[node] = max(Fmx[(node << 1) ^ 1] - Fmn[(node << 1)],
                     max(Fans[(node << 1)], Fans[(node << 1) ^ 1]));
  }
}
int QL[150000], sz;
void query(int node, int l, int r, int ql, int qr) {
  if (r < ql || l > qr) return;
  if (ql <= l && r <= qr) {
    QL[sz++] = node;
  } else {
    int mi = (l + r) >> 1;
    query((node << 1), l, mi, ql, qr);
    query((node << 1) ^ 1, mi + 1, r, ql, qr);
  }
}
int main() {
  int n, m, C;
  scanf("%d %d %d", &n, &m, &C);
  for (int i = 0; i < n; ++i) scanf("%d", &x[i]);
  for (int i = 1; i < n; ++i) scanf("%d", &p[i]);
  P[0] = 0;
  for (int i = 1; i < n; ++i) P[i] = P[i - 1] + p[i] / 100.0;
  for (int i = 0; i < n; ++i) F[i] = x[i] / 2.0 - C * P[i];
  build(1, 0, n - 1);
  double ans = 0;
  for (int i = 0, xa, xb; i < m; ++i) {
    scanf("%d %d", &xa, &xb);
    --xa;
    --xb;
    double aux = 0, mn = F[xa];
    sz = 0;
    query(1, 0, n - 1, xa, xb);
    for (int i = 0; i < sz; ++i) {
      aux = max(aux, Fans[QL[i]]);
      aux = max(aux, Fmx[QL[i]] - mn);
      mn = min(mn, Fmn[QL[i]]);
    }
    ans += aux;
  }
  printf("%.8f\n", ans);
  return 0;
}
