#include <bits/stdc++.h>
using namespace std;
struct otr {
  int typ;
  int x1, x2, ver;
};
bool operator<(otr a, otr b) {
  return (a.x1 < b.x1 || (a.x1 == b.x1 && a.typ < b.typ));
}
int main() {
  int n, m;
  int x, h, l, r;
  scanf("%d%d", &n, &m);
  otr* mas = new otr[4 * n + m + 2];
  int sz = 0;
  otr tmp;
  for (int i = 0; i < (int)n; ++i) {
    scanf("%d%d%d%d", &x, &h, &l, &r);
    tmp.typ = -1;
    tmp.x1 = x - h;
    tmp.x2 = x - 1;
    tmp.ver = l;
    mas[sz++] = tmp;
    tmp.typ = 1;
    tmp.x1 = x - 1;
    tmp.x2 = x - h;
    tmp.ver = l;
    mas[sz++] = tmp;
    tmp.typ = -1;
    tmp.x1 = x + 1;
    tmp.x2 = x + h;
    tmp.ver = r;
    mas[sz++] = tmp;
    tmp.typ = 1;
    tmp.x1 = x + h;
    tmp.x2 = x + 1;
    tmp.ver = r;
    mas[sz++] = tmp;
  }
  for (int i = 0; i < (int)m; ++i) {
    scanf("%d%d", &x, &h);
    tmp.typ = 0;
    tmp.x1 = x;
    tmp.x2 = h;
    mas[sz++] = tmp;
  }
  sort(mas, mas + sz);
  multiset<pair<int, int> > ar;
  double curv = 0.0;
  double ans = 0.0;
  int fl = 0;
  for (int i = 0; i < (int)sz; ++i) {
    if (mas[i].typ == -1) {
      ar.insert(make_pair(mas[i].x1, mas[i].ver));
      if (mas[i].ver == 100) {
        fl++;
        continue;
      }
      curv += log((100 - mas[i].ver) / 100.0);
    } else if (mas[i].typ == 0 && !fl) {
      ans += mas[i].x2 * exp(curv);
    } else if (mas[i].typ == 1) {
      ar.erase(make_pair(mas[i].x1, mas[i].ver));
      if (mas[i].ver == 100) {
        fl--;
        continue;
      }
      curv -= log((100 - mas[i].ver) / 100.0);
    }
  }
  printf("%.8lf", ans);
  return 0;
}
