#include <bits/stdc++.h>
using namespace std;
template <class t>
inline t read(t &x) {
  x = 0;
  char c = getchar();
  bool f = 0;
  while (!isdigit(c)) f |= c == '-', c = getchar();
  while (isdigit(c)) x = (x << 1) + (x << 3) + (c ^ 48), c = getchar();
  if (f) x = -x;
  return x;
}
template <class t>
inline void write(t x) {
  if (x < 0) {
    putchar('-'), write(-x);
  } else {
    if (x > 9) write(x / 10);
    putchar('0' + x % 10);
  }
}
const int N = 1e5 + 5, M = 1e4 + 5, NM = N * 4 + M, TR = NM << 2;
int n, m, pt[NM], pn;
double p[TR], ans;
struct tree {
  int x, h, l, r;
} a[N];
struct mushroom {
  int x, v;
} b[M];
void build(int x, int l, int r) {
  p[x] = 1;
  if (l == r) return;
  int mid = l + r >> 1;
  build(x << 1, l, mid);
  build(x << 1 | 1, mid + 1, r);
}
void up(int x, int l, int r, int L, int R, double v) {
  if (L <= l && r <= R) {
    p[x] *= v;
    return;
  }
  int mid = l + r >> 1;
  if (L <= mid) up(x << 1, l, mid, L, R, v);
  if (R > mid) up(x << 1 | 1, mid + 1, r, L, R, v);
}
double que(int x, int l, int r, int pos) {
  if (l == r) return p[x];
  int mid = l + r >> 1;
  if (pos <= mid) return p[x] * que(x << 1, l, mid, pos);
  return p[x] * que(x << 1 | 1, mid + 1, r, pos);
}
signed main() {
  read(n);
  read(m);
  for (int i = 1; i <= n; i++) {
    read(a[i].x);
    read(a[i].h);
    read(a[i].l);
    read(a[i].r);
    pt[++pn] = a[i].x - a[i].h;
    pt[++pn] = a[i].x - 1;
    pt[++pn] = a[i].x + 1;
    pt[++pn] = a[i].x + a[i].h;
  }
  for (int i = 1; i <= m; i++) {
    read(b[i].x);
    read(b[i].v);
    pt[++pn] = b[i].x;
  }
  sort(pt + 1, pt + 1 + pn);
  pn = unique(pt + 1, pt + 1 + pn) - pt - 1;
  build(1, 1, pn);
  for (int i = 1; i <= n; i++) {
    up(1, 1, pn, lower_bound(pt + 1, pt + 1 + pn, a[i].x - a[i].h) - pt,
       lower_bound(pt + 1, pt + 1 + pn, a[i].x - 1) - pt, 1.0 - 0.01 * a[i].l);
    up(1, 1, pn, lower_bound(pt + 1, pt + 1 + pn, a[i].x + 1) - pt,
       lower_bound(pt + 1, pt + 1 + pn, a[i].x + a[i].h) - pt,
       1.0 - 0.01 * a[i].r);
  }
  for (int i = 1; i <= m; i++)
    ans +=
        que(1, 1, pn, lower_bound(pt + 1, pt + 1 + pn, b[i].x) - pt) * b[i].v;
  printf("%.10lf", ans);
}
