#include <bits/stdc++.h>
using namespace std;
struct Event {
  int x, eps;
  int id, p;
  int tid;
};
bool operator<(const Event& l, const Event& r) {
  if (l.x != r.x) return l.x < r.x;
  return l.eps < r.eps;
}
const int N_MAX = 100500;
long double t[4 * N_MAX];
void update(int v, int t_l, int t_r, int pos, long double new_val) {
  if (t_l == t_r)
    t[v] = new_val;
  else {
    int t_m = (t_l + t_r) / 2;
    if (pos <= t_m)
      update(v + v, t_l, t_m, pos, new_val);
    else
      update(v + v + 1, t_m + 1, t_r, pos, new_val);
    t[v] = t[v + v] * t[v + v + 1];
  }
}
int main() {
  for (int i = 1; i < 4 * N_MAX; ++i) t[i] = 1.L;
  int n, m;
  scanf("%d %d", &n, &m);
  vector<Event> ev;
  ev.reserve(n * 4 + m);
  Event tmp;
  tmp.id = tmp.p = tmp.tid = 0;
  for (int i = 0; i < n; ++i) {
    int a, h, l, r;
    scanf("%d %d %d %d", &a, &h, &l, &r);
    tmp.tid = i;
    tmp.p = 100 - l;
    tmp.id = 1;
    tmp.x = a - h;
    tmp.eps = -1;
    ev.push_back(tmp);
    tmp.id = -1;
    tmp.x = a;
    tmp.eps = -1;
    ev.push_back(tmp);
    tmp.p = 100 - r;
    tmp.id = 1;
    tmp.x = a;
    tmp.eps = 1;
    ev.push_back(tmp);
    tmp.id = -1;
    tmp.x = a + h;
    tmp.eps = 1;
    ev.push_back(tmp);
  }
  for (int i = 0; i < m; ++i) {
    int b, z;
    scanf("%d %d", &b, &z);
    tmp.id = 0;
    tmp.x = b;
    tmp.eps = 0;
    tmp.p = z;
    tmp.tid = 0;
    ev.push_back(tmp);
  }
  sort(ev.begin(), ev.end());
  int zero = 0;
  long double prob = 1.L;
  long double ans = 0.L;
  for (size_t i = 0; i < ev.size(); ++i) {
    const Event& e = ev[i];
    if (e.id == 0) {
      ans += t[1] * e.p;
    } else if (e.id == 1) {
      update(1, 0, n - 1, e.tid, e.p * 0.01L);
    } else {
      update(1, 0, n - 1, e.tid, 1.0L);
    }
  }
  cout << fixed << setprecision(6) << ans << '\n';
  return 0;
}
