#include <bits/stdc++.h>
using namespace std;
int countbit(int n) { return (n == 0) ? 0 : (1 + countbit(n & (n - 1))); }
int lowbit(int n) { return (n ^ (n - 1)) & n; }
const double pi = acos(-1.0);
const double eps = 1e-7;
template <class T>
T sqr(T x) {
  return x * x;
}
int N, M;
struct Point {
  int type, pos, val;
  bool operator<(const Point &p) const {
    if (pos == p.pos) return type < p.type;
    return pos < p.pos;
  }
};
Point p[600000];
int main() {
  scanf("%d%d", &N, &M);
  int index = 0;
  for (int i = 0; i < N; ++i) {
    int a, b, c, d;
    scanf("%d%d%d%d", &a, &b, &c, &d);
    p[index].pos = a - b, p[index].type = 1, p[index++].val = c;
    p[index].pos = a - 1, p[index].type = 3, p[index++].val = c;
    p[index].pos = a + 1, p[index].type = 1, p[index++].val = d;
    p[index].pos = a + b, p[index].type = 3, p[index++].val = d;
  }
  for (int i = 0; i < M; ++i) {
    int a, b;
    scanf("%d%d", &a, &b);
    p[index].pos = a, p[index].type = 2, p[index++].val = b;
  }
  sort(p, p + index);
  double prob = 0;
  double exp = 0;
  int falldown = 0;
  for (int i = 0; i < index; ++i) {
    if (p[i].type == 1) {
      if (p[i].val == 100)
        ++falldown;
      else
        prob += log10(double(100 - p[i].val) / 100);
    } else if (p[i].type == 3) {
      if (p[i].val == 100)
        --falldown;
      else
        prob -= log10(double(100 - p[i].val) / 100);
    } else {
      if (falldown == 0) exp += double(p[i].val) * pow(10.0, prob);
    }
  }
  printf("%.5f\n", exp);
  return 0;
}
