#include <bits/stdc++.h>
using namespace std;
int n, m;
struct T {
  int first, h;
  long double l, r;
};
struct M {
  int first, p;
};
inline bool operator<(const T& a, const T& b) { return a.first < b.first; }
inline bool operator<(const M& a, const M& b) { return a.first < b.first; }
T a[111111];
M b[11111];
long double f[222222 << 2];
int cors[222222];
int k;
long double pro[11111];
inline int fndpos(int first) {
  return lower_bound(cors, cors + k, first) - cors;
}
void add(int v, int l, int r, int pos, long double val) {
  if (l + 1 == r) {
    f[v] *= val;
    return;
  }
  int mid = (l + r + 1) / 2;
  if (pos < mid)
    add(2 * v + 1, l, mid, pos, val);
  else
    add(2 * v + 2, mid, r, pos, val);
  f[v] = f[2 * v + 1] * f[2 * v + 2];
}
long double findmul(int v, int l, int r, int st, int fn) {
  if (l == st && r == fn) {
    return f[v];
  }
  long double ans = 1;
  int mid = (l + r + 1) / 2;
  if (st < mid) ans *= findmul(2 * v + 1, l, mid, st, min(mid, fn));
  if (fn > mid) ans *= findmul(2 * v + 2, mid, r, max(st, mid), fn);
  return ans;
}
long double pro2[11111];
inline void naive() {
  for (int i = 0; i < m; ++i) pro2[i] = 1.0;
  for (int i = 0; i < m; ++i)
    for (int j = 0; j < n; ++j) {
      if (a[j].first < b[i].first && a[j].first + a[j].h >= b[i].first)
        pro2[i] *= (1 - a[j].r);
      if (a[j].first > b[i].first && a[j].first - a[j].h <= b[i].first)
        pro2[i] *= (1 - a[j].l);
    }
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n; ++i) {
    int l1, r1;
    scanf("%d%d%d%d", &a[i].first, &a[i].h, &l1, &r1);
    cors[k++] = a[i].first + a[i].h;
    cors[k++] = a[i].first - a[i].h;
    a[i].l = l1 / 100.;
    a[i].r = r1 / 100.;
  }
  for (int i = 0; i < m; ++i) {
    scanf("%d%d", &b[i].first, &b[i].p);
    cors[k++] = b[i].first;
  }
  sort(cors, cors + k);
  k = unique(cors, cors + k) - cors;
  sort(a, a + n);
  sort(b, b + m);
  for (int i = 0; i < k << 2; ++i) {
    f[i] = 1.;
  }
  for (int i = 0; i < m; ++i) {
    pro[i] = 1.;
  }
  int pos = 0;
  for (int i = 0; i < m; ++i) {
    while (pos < n && a[pos].first < b[i].first) {
      add(0, 0, k, fndpos(a[pos].first + a[pos].h), 1 - a[pos].r);
      pos++;
    }
    pro[i] *= findmul(0, 0, k, fndpos(b[i].first), k);
  }
  for (int i = 0; i < k << 2; ++i) {
    f[i] = 1.;
  }
  pos = n - 1;
  for (int i = m - 1; i >= 0; --i) {
    while (pos >= 0 && a[pos].first > b[i].first) {
      add(0, 0, k, fndpos(a[pos].first - a[pos].h), 1 - a[pos].l);
      --pos;
    }
    pro[i] *= findmul(0, 0, k, 0, fndpos(b[i].first) + 1);
  }
  long double ans = 0;
  for (int i = 0; i < m; ++i) {
    ans += b[i].p * pro[i];
  }
  printf("%0.9lf\n", (double)ans);
  return 0;
}
