#include <bits/stdc++.h>
using namespace std;
struct interval {
  double sum, ratio;
};
struct mushroom {
  int xm;
  double value;
  bool operator<(const struct mushroom& rhs) const { return xm < rhs.xm; }
};
int nseg;
int xa[100000], h[100000];
double left_percent[100000], right_percent[100000];
mushroom mush[10000];
interval* seg1d;
void init_rec(int i, int l, int r) {
  if (l < r - 1) {
    int m = (l + r) / 2;
    init_rec((2 * (i) + 1), l, m);
    init_rec((2 * (i) + 2), m, r);
    seg1d[i].sum = seg1d[(2 * (i) + 1)].sum + seg1d[(2 * (i) + 2)].sum;
  } else
    seg1d[i].sum = mush[l].value;
  seg1d[i].ratio = 1;
}
double multiply(int i, int l, int r, int a, int b, double ratio) {
  double change = 0;
  if (a <= l && r <= b) {
    change = (ratio - 1) * seg1d[i].ratio * seg1d[i].sum;
    seg1d[i].ratio *= ratio;
  } else if (b > l && r > a) {
    int m = (l + r) / 2;
    change += multiply((2 * (i) + 1), l, m, a, b, ratio);
    change += multiply((2 * (i) + 2), m, r, a, b, ratio);
    seg1d[i].sum += change;
    change *= seg1d[i].ratio;
  }
  return change;
}
double query(int i, int l, int r, int a, int b) {
  if (l >= b || r <= a)
    return 0;
  else if (a <= l && r <= b)
    return seg1d[i].ratio * seg1d[i].sum;
  else {
    int m = (l + r) / 2;
    double s1 = query((2 * (i) + 1), l, m, a, b);
    double s2 = query((2 * (i) + 2), m, r, a, b);
    return (s1 + s2) * seg1d[i].ratio;
  }
}
void init(int m) {
  nseg = 1;
  while (nseg < m) nseg *= 2;
  seg1d = new interval[2 * nseg - 1];
  init_rec(0, 0, m);
}
int main() {
  ios::sync_with_stdio(false);
  int n, m;
  scanf("%d %d", &n, &m);
  for (int i = 0; i < n; i++) {
    scanf("%d %d %lf %lf", &xa[i], &h[i], &left_percent[i], &right_percent[i]);
    left_percent[i] = 1 - left_percent[i] / 100.0;
    right_percent[i] = 1 - right_percent[i] / 100.0;
  }
  for (int i = 0; i < m; i++) scanf("%d %lf", &mush[i].xm, &mush[i].value);
  sort(mush, mush + m);
  init(m);
  for (int i = 0; i < n; i++) {
    int a = lower_bound(mush, mush + m, mushroom{xa[i] - h[i], 0}) - mush;
    int b = lower_bound(mush + a, mush + m, mushroom{xa[i], 0}) - mush;
    multiply(0, 0, m, a, b, left_percent[i]);
    a = upper_bound(mush + b, mush + m, mushroom{xa[i], 0}) - mush;
    b = upper_bound(mush + a, mush + m, mushroom{xa[i] + h[i], 0}) - mush;
    multiply(0, 0, m, a, b, right_percent[i]);
  }
  printf("%.4f\n", query(0, 0, m, 0, m));
  return 0;
}
