#include <bits/stdc++.h>
using namespace std;
struct tr {
  int a, h, l, r;
};
struct mushroom {
  int x, s;
};
int n, m;
tr tree[100000 + 1];
mushroom ms[10000 + 1];
double pr[10000 + 1];
bool cmp(const mushroom& a, const mushroom& b) { return (a.x < b.x); }
int func(const int& x) {
  int l = 0, r = m;
  while (l < r) {
    int mid = (l + r) / 2;
    ms[mid].x >= x ? r = mid : l = mid + 1;
  }
  while (ms[l].x < x) l++;
  return (l);
}
int main() {
  cin >> n >> m;
  for (int i = 0; i < n; i++)
    cin >> tree[i].a >> tree[i].h >> tree[i].l >> tree[i].r;
  for (int i = 0; i < m; i++) {
    int x, s;
    cin >> ms[i].x >> ms[i].s;
    pr[i] = 1.0;
  }
  ms[m].x = 2 * 1000 * 1000 * 1000 + 1;
  sort(ms, ms + m, &cmp);
  for (int i = 0; i < n; i++) {
    if (tree[i].l == 100) {
      for (int k = func(tree[i].a - tree[i].h); k < func(tree[i].a); k++)
        ms[k].s = 0;
    } else {
      pr[func(tree[i].a - tree[i].h)] *= (1 - tree[i].l / 100.0);
      pr[func(tree[i].a)] /= (1 - tree[i].l / 100.0);
    }
    if (tree[i].r == 100) {
      for (int k = func(tree[i].a + 1); k < func(tree[i].a + tree[i].h + 1);
           k++)
        ms[k].s = 0;
    } else {
      pr[func(tree[i].a + tree[i].h + 1)] /= (1 - tree[i].r / 100.0);
      pr[func(tree[i].a + 1)] *= (1 - tree[i].r / 100.0);
    }
  }
  double ans = 0, mn = 1;
  for (int i = 0; i < m; i++) {
    mn *= pr[i];
    ans += mn * ms[i].s;
  }
  cout << ans;
}
