#include <bits/stdc++.h>
namespace chtholly {
char buf[1 << 23], *p1 = buf, *p2 = buf;
inline int read() {
  int x = 0, f = 1;
  char c = getchar();
  for (; !isdigit(c); c = getchar()) f ^= c == '-';
  for (; isdigit(c); c = getchar()) x = (x << 3) + (x << 1) + (c ^ '0');
  return f ? x : -x;
}
template <typename mitsuha>
inline bool read(mitsuha &x) {
  x = 0;
  int f = 1;
  char c = getchar();
  for (; !isdigit(c) && ~c; c = getchar()) f ^= c == '-';
  if (!~c) return 0;
  for (; isdigit(c); c = getchar()) x = (x << 3) + (x << 1) + (c ^ '0');
  return x = f ? x : -x, 1;
}
template <typename mitsuha>
inline int write(mitsuha x) {
  if (!x) return 0 & putchar(48);
  if (x < 0) putchar('-'), x = -x;
  int bit[20], i, p = 0;
  for (; x; x /= 10) bit[++p] = x % 10;
  for (i = p; i; --i) putchar(bit[i] + 48);
  return 0;
}
inline char fuhao() {
  char c = getchar();
  for (; isspace(c); c = getchar())
    ;
  return c;
}
}  // namespace chtholly
using namespace chtholly;
using namespace std;
const int yuzu = 2e5;
using db = double;
typedef long long fuko[yuzu | 10];
fuko a, p;
struct segtree {
  struct node {
    long long dp, sl, sr, sum;
  } nd[yuzu << 2 | 13];
  void push_up(node &s, node l, node r) {
    s.sum = l.sum + r.sum;
    s.sl = max(l.sl, l.sum + r.sl);
    s.sr = max(r.sr, r.sum + l.sr);
    s.dp = max(max(l.dp, r.dp), l.sr + r.sl);
  }
  void build(int rt = 1, int l = 1, int r = *p - 1) {
    if (l == r) {
      nd[rt] = {a[l], a[l], a[l], a[l]};
    } else {
      int mid = l + r >> 1;
      build(rt << 1, l, mid), build(rt << 1 | 1, mid + 1, r);
      push_up(nd[rt], nd[rt << 1], nd[rt << 1 | 1]);
    }
  }
  node query(int ql, int qr, int rt = 1, int l = 1, int r = *p - 1) {
    if (ql <= l && qr >= r) return nd[rt];
    int mid = l + r >> 1;
    if (qr <= mid) return query(ql, qr, rt << 1, l, mid);
    if (ql > mid) return query(ql, qr, rt << 1 | 1, mid + 1, r);
    node lxy;
    push_up(lxy, query(ql, qr, rt << 1, l, mid),
            query(ql, qr, rt << 1 | 1, mid + 1, r));
    return lxy;
  }
} zw;
int main() {
  int m, c, i, l, r;
  read(*p), read(m), read(*a);
  for (i = 1; i <= *p; ++i)
    a[i] = read(), i > 1 ? a[i - 1] = (a[i] - a[i - 1]) * 50 : 0;
  for (i = 1; i < *p; ++i) p[i] = read(), a[i] -= p[i] * *a;
  zw.build();
  long long lxy = 0;
  for (; m--;) {
    l = read(), r = read() - 1;
    lxy += max(0ll, zw.query(l, r).dp);
  }
  printf("%.9lf\n", lxy * .01);
}
