#include <bits/stdc++.h>
using namespace std;
struct st {
  long double ans, sum, pre, suff;
  st() {
    ans = 0.0;
    pre = 0.0;
    suff = 0.0;
    sum = 0.0;
  }
} tree[4000001];
long long int x[1000001], n, m, c;
long double p[1000001], arr[1000001];
void build(long long int node, long long int a, long long int b) {
  if (a == b) {
    long double temp = 0.0;
    tree[node].sum = arr[a] * 1.0;
    tree[node].pre = max(temp, arr[a] * 1.0);
    tree[node].suff = max(temp, arr[a] * 1.0);
    tree[node].ans = max(temp, arr[a] * 1.0);
    return;
  }
  long long int mid = (a + b) / 2;
  build(2 * node, a, mid);
  build(2 * node + 1, mid + 1, b);
  tree[node].sum = tree[2 * node].sum + tree[2 * node + 1].sum;
  tree[node].pre = tree[2 * node].pre;
  tree[node].pre =
      max(tree[node].pre, tree[2 * node].sum + tree[2 * node + 1].pre);
  tree[node].suff = tree[2 * node + 1].suff;
  tree[node].suff =
      max(tree[node].suff, tree[2 * node + 1].sum + tree[2 * node].suff);
  tree[node].ans = max(tree[2 * node].ans, tree[2 * node + 1].ans);
  tree[node].ans =
      max(tree[node].ans, tree[2 * node].suff + tree[2 * node + 1].pre);
}
st query(long long int node, long long int a, long long int b, long long int l,
         long long int r) {
  if (a > b || a > r || b < l) {
    struct st nd;
    nd.pre = 0.0;
    nd.sum = 0.0;
    nd.suff = 0.0;
    nd.ans = 0.0;
    return nd;
  }
  if (a >= l && b <= r) return tree[node];
  long long int mid = (a + b) / 2;
  struct st node1 = query(2 * node, a, mid, l, r);
  struct st node2 = query(2 * node + 1, mid + 1, b, l, r);
  struct st nd;
  nd.sum = node1.sum + node2.sum;
  nd.pre = node1.pre;
  nd.pre = max(nd.pre, node1.sum + node2.pre);
  nd.suff = node2.suff;
  nd.suff = max(nd.suff, node2.sum + node1.suff);
  nd.ans = max(node1.ans, node2.ans);
  nd.ans = max(nd.ans, node1.suff + node2.pre);
  return nd;
}
int main() {
  cout << fixed << setprecision(10);
  ios::sync_with_stdio(false);
  ;
  cin.tie(0);
  ;
  long long int i, j, start, stop;
  long double res = 0.0;
  cin >> n >> m >> c;
  for (i = 1; i <= n; i++) cin >> x[i];
  for (i = 1; i <= n - 1; i++) cin >> p[i];
  for (i = 1; i <= n - 1; i++)
    arr[i] = 1.0 * (x[i + 1] - x[i]) / 2 - (1.0 * p[i] * c) / 100;
  build(1, 1, n - 1);
  for (i = 1; i <= m; i++) {
    cin >> start >> stop;
    st nd = query(1, 1, n - 1, start, stop - 1);
    res += nd.ans;
  }
  cout << res;
  return 0;
}
