#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:128000000")
using namespace std;
const double PI = acos(-1.0);
long long INF = 1e18;
struct node {
  int x, y;
  long long sum;
  long long mx, mn, res;
  node *left, *right;
  void init(int x0, int y0, long long s) {
    x = x0;
    y = y0;
    sum = s;
    left = right = 0;
    mn = mx = sum;
    res = 0;
  }
} BUFF[150150];
int BUFFcnt = 0;
void recalc(node *v) {
  if (v == 0) return;
  v->mn = v->mx = v->sum;
  v->res = 0;
  if (v->left) {
    if (v->right) v->res = max(v->res, v->right->mx - v->left->mn);
    v->res = max(v->res, v->sum - v->left->mn);
    v->res = max(v->res, v->left->res);
    v->mx = max(v->mx, v->left->mx);
    v->mn = min(v->mn, v->left->mn);
  }
  if (v->right) {
    v->res = max(v->res, v->right->mx - v->sum);
    v->res = max(v->res, v->right->res);
    v->mx = max(v->mx, v->right->mx);
    v->mn = min(v->mn, v->right->mn);
  }
}
node *merge(node *L, node *R) {
  if (L == 0) return R;
  if (R == 0) return L;
  if (L->y > R->y) {
    L->right = merge(L->right, R);
    recalc(L);
    return L;
  }
  R->left = merge(L, R->left);
  recalc(R);
  return R;
}
void split(node *v, node *&L, node *&R, int x) {
  if (v == 0) {
    L = R = 0;
    return;
  }
  if (v->x < x) {
    split(v->right, v->right, R, x);
    L = v;
    recalc(L);
    return;
  }
  split(v->left, L, v->left, x);
  R = v;
  recalc(R);
}
node *Add(node *v, int x, int y, long long s) {
  node *L = 0, *R = 0, *added = &BUFF[BUFFcnt++];
  added->init(x, y, s);
  split(v, L, R, x);
  L = merge(L, added);
  return merge(L, R);
}
int main() {
  int n, m, c;
  cin >> n >> m >> c;
  int X[200000];
  for (int i = (0), ei = (n); i < ei; i++) scanf("%d", X + i);
  int P[200000];
  for (int i = (0), ei = (n - 1); i < ei; i++) scanf("%d", P + i);
  long long S[150001] = {0};
  vector<int> St[150001];
  for (int i = (0), ei = (m); i < ei; i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    --a;
    --b;
    St[b].push_back(a);
  }
  long long res = 0;
  node *L = 0, *R = 0, *T = 0;
  long long PS[150150] = {0};
  for (int i = (1), ei = (n); i < ei; i++) PS[i] = PS[i - 1] + P[i - 1];
  for (int i = (0), ei = (n); i < ei; i++) {
    long long curr = 100LL * X[i] - 2LL * PS[i] * c;
    T = Add(T, i, rand(), curr);
    for (int j = (0), ej = (St[i].size()); j < ej; j++) {
      split(T, L, R, St[i][j]);
      long long mx = 0;
      if (R) mx = R->res;
      res += mx;
      T = merge(L, R);
    }
  }
  printf("%.8lf\n", res / 200.0);
  return 0;
}
