#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int n, m;
vector<pair<pair<long long, long long>, long long> > tl, tr;
vector<pair<int, int> > mush;
priority_queue<pair<long long, long long>, vector<pair<long long, long long> >,
               greater<pair<long long, long long> > >
    q1;
priority_queue<pair<long long, long long>, vector<pair<long long, long long> >,
               greater<pair<long long, long long> > >
    q2;
double ans;
int main() {
  scanf("%d%d", &n, &m);
  for (int i = (0); i < (n); i++) {
    int a, h, l, r;
    scanf("%d%d%d%d", &a, &h, &l, &r);
    tl.push_back(make_pair(make_pair((0LL + a - h), (0LL + a - 1)), 100 - l));
    tl.push_back(make_pair(make_pair((0LL + a + 1), (0LL + a + h)), 100 - r));
  }
  for (int i = (0); i < (m); i++) {
    int b, z;
    scanf("%d%d", &b, &z);
    mush.push_back(make_pair(b, z));
  }
  sort(tl.begin(), tl.end());
  sort(mush.begin(), mush.end());
  int p1, p2;
  double p = 0;
  int cnt = 0;
  for (p1 = 0, p2 = 0; p2 < m; p2++) {
    long long pos = mush[p2].first;
    while ((int)q1.size() && q1.top().first < pos) {
      pair<long long, double> t = q1.top();
      q1.pop();
      if (t.second == 0) cnt--;
      if (t.second) p -= log(t.second) - log(100);
    }
    while (p1 < (int)tl.size() && tl[p1].first.first <= pos) {
      if (tl[p1].first.second >= pos) {
        if (tl[p1].second == 0)
          cnt++;
        else {
          p += log(tl[p1].second) - log(100);
        }
        q1.push(make_pair(tl[p1].first.second, tl[p1].second));
      }
      p1++;
    }
    if (!cnt) ans += mush[p2].second * exp(p);
  }
  printf("%.10f\n", ans);
  return 0;
}
