#include <bits/stdc++.h>
using namespace std;
class point {
 public:
  int x, type, z, id;
  int p;
};
bool operator<(const point &a, const point &b) {
  if (a.x < b.x) return true;
  if (a.x == b.x) {
    if (a.type == 0 && b.type == 2) return true;
    if (a.type == 1 && b.type == 0) return true;
  }
  return false;
}
long double ppow(long double p, int col) {
  long double ans = 1.0;
  while (col > 0) {
    if (col % 2 == 0) {
      p *= p;
      col /= 2;
    } else {
      ans *= p;
      col--;
    }
  }
  return ans;
}
vector<point> a;
int n, m, i, j, x, h, l, r, z, zero;
point q;
long double ans, cur;
set<int> st;
vector<long double> v;
int ver[102];
int main() {
  cin >> n >> m;
  for (i = 1; i <= n; i++) {
    cin >> x >> h >> l >> r;
    q.x = x - h;
    q.p = l;
    q.type = 1;
    q.id = i;
    a.push_back(q);
    q.x = x - 1;
    q.p = l;
    q.type = 2;
    q.id = i;
    a.push_back(q);
    q.x = x + 1;
    q.p = r;
    q.type = 1;
    q.id = n + i;
    a.push_back(q);
    q.x = x + h;
    q.p = r;
    q.type = 2;
    q.id = n + i;
    a.push_back(q);
  }
  for (i = 1; i <= m; i++) {
    cin >> x >> z;
    q.type = 0;
    q.z = z;
    q.x = x;
    a.push_back(q);
  }
  sort(a.begin(), a.end());
  ans = 0.0;
  cur = 1.0;
  for (i = 0; i < a.size(); i++) {
    if (a[i].type == 1) {
      ver[100 - a[i].p]++;
    } else if (a[i].type == 2) {
      ver[100 - a[i].p]--;
    } else {
      cur = 1.0;
      for (j = 0; j <= 100; j++) cur *= ppow((long double)j / 100.0, ver[j]);
      ans += cur * a[i].z;
    }
  }
  cout.setf(ios ::fixed | ios ::showpoint);
  cout.precision(4);
  cout << ans;
  return 0;
}
