#include <bits/stdc++.h>
using namespace std;
typedef struct node {
  int x;
  double date;
  int y;
} node;
node a[300005];
node b[10005];
vector<int> vec;
typedef struct nod {
  int l;
  int r;
  double date;
  double flag;
} nod;
nod d[300005 << 4];
void built(int root, int l, int r) {
  if (l == r) {
    d[root].l = l;
    d[root].r = r;
    d[root].date = 1;
    d[root].flag = 1;
    return;
  }
  int mid = (l + r) >> 1;
  built(root << 1, l, mid);
  built(root << 1 | 1, mid + 1, r);
  d[root].l = d[root << 1].l;
  d[root].r = d[root << 1 | 1].r;
  d[root].date = 1;
  d[root].flag = 1;
}
void pushup(int root) {
  d[root << 1].date *= d[root].flag;
  d[root << 1].flag *= d[root].flag;
  d[root << 1 | 1].date *= d[root].flag;
  d[root << 1 | 1].flag *= d[root].flag;
  d[root].flag = 1;
}
void update(int root, int l, int r, double t) {
  if (l <= d[root].l && d[root].r <= r) {
    d[root].flag *= t;
    d[root].date *= t;
    pushup(root);
    return;
  }
  pushup(root);
  int mid = (d[root].l + d[root].r) >> 1;
  if (l <= mid) update(root << 1, l, r, t);
  if (r > mid) update(root << 1 | 1, l, r, t);
}
double ans;
void querty(int root, int t) {
  if (d[root].l == d[root].r) {
    ans = d[root].date;
    return;
  }
  pushup(root);
  int mid = (d[root].l + d[root].r) >> 1;
  if (t <= mid)
    querty(root << 1, t);
  else
    querty(root << 1 | 1, t);
}
int main() {
  int n, m;
  scanf("%d%d", &n, &m);
  int aa, bb;
  double cc, dd;
  int u = 0;
  for (int i = 1; i <= n; i++) {
    scanf("%d%d%lf%lf", &aa, &bb, &cc, &dd);
    a[++u].x = aa - bb;
    a[u].date = cc;
    a[u].y = aa;
    a[++u].y = aa + bb;
    a[u].date = dd;
    a[u].x = aa;
    vec.push_back(aa - bb);
    vec.push_back(aa + bb);
    vec.push_back(aa);
  }
  for (int i = 1; i <= m; i++) {
    scanf("%d%lf", &aa, &cc);
    vec.push_back(aa);
    b[i].x = aa;
    b[i].date = cc;
  }
  sort(vec.begin(), vec.end());
  int t = unique(vec.begin(), vec.end()) - vec.begin();
  for (int i = 1; i <= m; i++) {
    b[i].x =
        lower_bound(vec.begin(), vec.begin() + t, b[i].x) - vec.begin() + 1;
  }
  built(1, 1, t);
  for (int i = 1; i <= u; i++) {
    a[i].x =
        lower_bound(vec.begin(), vec.begin() + t, a[i].x) - vec.begin() + 1;
    a[i].y =
        lower_bound(vec.begin(), vec.begin() + t, a[i].y) - vec.begin() + 1;
    update(1, a[i].x, a[i].y - 1, (100.00 - a[i].date) / 100.0);
    i++;
    a[i].y =
        lower_bound(vec.begin(), vec.begin() + t, a[i].y) - vec.begin() + 1;
    update(1, a[i - 1].y + 1, a[i].y, (100.00 - a[i].date) / 100.0);
  }
  double ans1 = 0;
  for (int i = 1; i <= m; i++) {
    querty(1, b[i].x);
    ans1 += (ans * b[i].date);
  }
  printf("%.10f\n", ans1);
  return 0;
}
