#include <bits/stdc++.h>
using namespace std;
struct Event {
  int x, type, prob;
  Event(int x, int type, int prob) : x(x), type(type), prob(prob) {}
  bool operator<(const Event &o) const { return x < o.x; }
};
struct Mushroom {
  int x, power;
  bool operator<(const Mushroom &o) const { return x < o.x; }
};
const int MAXN = 200000;
int n, m, a[MAXN], h[MAXN], l[MAXN], r[MAXN];
Mushroom mushroom[MAXN];
vector<Event> event;
int main() {
  cin >> n >> m;
  for (int i = 0; i < n; ++i) {
    cin >> a[i] >> h[i] >> l[i] >> r[i];
    if (l[i] > 0) {
      event.push_back(Event(a[i] - h[i], +1, 100 - l[i]));
      event.push_back(Event(a[i], -1, 100 - l[i]));
    }
    if (r[i] > 0) {
      event.push_back(Event(a[i] + 1, +1, 100 - r[i]));
      event.push_back(Event(a[i] + h[i] + 1, -1, 100 - r[i]));
    }
  }
  for (int i = 0; i < m; ++i) {
    cin >> mushroom[i].x >> mushroom[i].power;
  }
  sort(mushroom, mushroom + m);
  sort(event.begin(), event.end());
  int zero_count = 0, ptr = 0;
  double ln_p = 0.0, ans = 0;
  for (int i = 0; i < m; ++i) {
    while (ptr < (int)event.size() && event[ptr].x <= mushroom[i].x) {
      if (event[ptr].type == +1) {
        if (event[ptr].prob != 0) {
          ln_p += log(event[ptr].prob / 100.0);
        } else {
          ++zero_count;
        }
      } else {
        if (event[ptr].prob != 0) {
          ln_p -= log(event[ptr].prob / 100.0);
        } else {
          --zero_count;
        }
      }
      ++ptr;
    }
    if (zero_count == 0) {
      double p = exp(ln_p);
      ans += p * mushroom[i].power;
    }
  }
  cout.setf(ios::fixed);
  cout.precision(10);
  cout << ans << endl;
  return 0;
}
