#include <bits/stdc++.h>
using namespace std;
int n, m;
int a[100010], h[100010], l[100010], r[100010];
int b[10010], z[10010];
int cn, c[400010];
struct segment {
  int head, tn;
  int lb[800010], rb[800010];
  int lc[800010], rc[800010];
  double poss[800010];
  int build(int l, int r) {
    int p = ++tn;
    lb[p] = l;
    rb[p] = r;
    if (l == r)
      lc[p] = rc[p] = -1;
    else {
      int mid = l + ((r - l) >> 1);
      lc[p] = build(l, mid);
      rc[p] = build(mid + 1, r);
    }
    poss[p] = 1.0;
    return p;
  }
  void init(int l, int r) {
    tn = 0;
    head = build(l, r);
    return;
  }
  void passDown(int p) {
    poss[lc[p]] *= poss[p];
    poss[rc[p]] *= poss[p];
    poss[p] = 1.0;
    return;
  }
  void mult(int p, int l, int r, double x) {
    if ((l <= lb[p]) && (rb[p] <= r))
      poss[p] *= x;
    else {
      passDown(p);
      int mid = lb[p] + ((rb[p] - lb[p]) >> 1);
      if (l <= mid) mult(lc[p], l, r, x);
      if (mid + 1 <= r) mult(rc[p], l, r, x);
    }
    return;
  }
  double getPoss(int p, int x) {
    if ((lb[p] == x) && (x == rb[p]))
      return poss[p];
    else {
      passDown(p);
      int mid = lb[p] + ((rb[p] - lb[p]) >> 1);
      if (x <= mid) return getPoss(lc[p], x);
      if (mid + 1 <= x) return getPoss(rc[p], x);
    }
  }
};
segment seg;
void qsort(int a[], int l, int r) {
  if (l >= r) return;
  int i = l, j = r;
  int x = a[l + ((r - l) >> 1)];
  do {
    while (a[i] < x) i++;
    while (x < a[j]) j--;
    if (i <= j) {
      int t = a[i];
      a[i] = a[j];
      a[j] = t;
      i++;
      j--;
    }
  } while (i <= j);
  qsort(a, l, j);
  qsort(a, i, r);
  return;
}
void delRep(int a[], int &an) {
  int tn = 0;
  for (int i = 1; i <= an; i++)
    if ((tn == 0) || (a[tn] != a[i])) a[++tn] = a[i];
  an = tn;
  return;
}
int find(int x) {
  int l = 1, r = cn;
  while (l < r) {
    int mid = l + ((r - l) >> 1);
    if (x < c[mid])
      r = mid - 1;
    else if (x == c[mid])
      return mid;
    else if (x > c[mid])
      l = mid + 1;
  }
  return l;
}
int main() {
  scanf("%d %d", &n, &m);
  cn = 0;
  for (int i = 1; i <= n; i++) {
    scanf("%d %d %d %d", &a[i], &h[i], &l[i], &r[i]);
    c[++cn] = a[i];
    c[++cn] = a[i] - h[i];
    c[++cn] = a[i] + h[i];
  }
  for (int i = 1; i <= m; i++) {
    scanf("%d %d", &b[i], &z[i]);
    c[++cn] = b[i];
  }
  qsort(c, 1, cn);
  delRep(c, cn);
  seg.init(1, cn);
  for (int i = 1; i <= n; i++) {
    seg.mult(1, find(a[i] - h[i]), find(a[i]) - 1, 1.0 - l[i] * 0.01);
    seg.mult(1, find(a[i]) + 1, find(a[i] + h[i]), 1.0 - r[i] * 0.01);
  }
  double ans = 0.0;
  for (int i = 1; i <= m; i++) ans += z[i] * seg.getPoss(1, find(b[i]));
  printf("%.5lf\n", ans);
  return 0;
}
