#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100010;
const int MAXM = 20010;
const int MAXNODE = 16 * MAXN;
const int LOGMAXN = 50;
const int INF = 0x3f3f3f3f;
const double eps = 1e-9;
int N, M;
int b[MAXM], z[MAXM], x[3 * (MAXN + MAXM)];
struct Tree {
  int x, h;
  double l, r;
} a[MAXN];
struct SegmentTree {
  double mul[MAXNODE];
  void build(int o, int L, int R) {
    mul[o] = 1;
    if (L >= R) return;
    int mid = L + (R - L) / 2;
    build(o << 1, L, mid);
    build(o << 1 | 1, mid + 1, R);
  }
  void pushdown(int o) {
    mul[o << 1] *= mul[o];
    mul[o << 1 | 1] *= mul[o];
    mul[o] = 1;
  }
  void update(int o, int L, int R, int ql, int qr, double p) {
    if (ql <= L && qr >= R) {
      mul[o] *= p;
      return;
    }
    pushdown(o);
    int mid = L + (R - L) / 2;
    if (ql <= mid) update(o << 1, L, mid, ql, qr, p);
    if (qr > mid) update(o << 1 | 1, mid + 1, R, ql, qr, p);
  }
  double query(int o, int L, int R, int pos) {
    if (L >= R) return mul[o];
    pushdown(o);
    int mid = L + (R - L) / 2;
    double ans;
    if (pos <= mid)
      ans = query(o << 1, L, mid, pos);
    else
      ans = query(o << 1 | 1, mid + 1, R, pos);
    return ans;
  }
} tree;
int main() {
  while (scanf("%d%d", &N, &M) != EOF) {
    int k = 0;
    for (int i = 0; i < N; i++) {
      scanf("%d%d%lf%lf", &a[i].x, &a[i].h, &a[i].l, &a[i].r);
      a[i].l /= 100;
      a[i].r /= 100;
      x[k++] = a[i].x;
      x[k++] = a[i].x - a[i].h;
      x[k++] = a[i].x + a[i].h;
    }
    for (int i = 0; i < M; i++) {
      scanf("%d%d", &b[i], &z[i]);
      x[k++] = b[i];
    }
    sort(x, x + k);
    k = unique(x, x + k) - x;
    tree.build(1, 1, k);
    for (int i = 0; i < N; i++) {
      int qm = lower_bound(x, x + k, a[i].x) - x + 1;
      int ql = lower_bound(x, x + k, a[i].x - a[i].h) - x + 1,
          qr = lower_bound(x, x + k, a[i].x + a[i].h) - x + 1;
      tree.update(1, 1, k, ql, qm - 1, (1 - a[i].l));
      tree.update(1, 1, k, qm + 1, qr, (1 - a[i].r));
    }
    double ans = 0;
    for (int i = 0; i < M; i++) {
      int pos = lower_bound(x, x + k, b[i]) - x + 1;
      ans += z[i] * tree.query(1, 1, k, pos);
    }
    printf("%.10lf\n", ans);
  }
  return 0;
}
