#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 10, maxz = 1e4 + 10;
int a[maxn], h[maxn];
double L[maxn], R[maxn];
int b[maxz], z[maxz], allB[maxz], allZ[maxz];
double P[maxz * 3];
void update(int v, int tl, int tr, int l, int r, double add) {
  if (l > r) return;
  if (l == tl && tr == r)
    P[v] += add;
  else {
    int tm = (tl + tr) / 2;
    update(v * 2, tl, tm, l, min(r, tm), add);
    update(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r, add);
  }
}
double get(int v, int tl, int tr, int pos) {
  if (tl == tr) return P[v];
  int tm = (tl + tr) / 2;
  if (pos <= tm)
    return P[v] + get(v * 2, tl, tm, pos);
  else
    return P[v] + get(v * 2 + 1, tm + 1, tr, pos);
}
int main() {
  int n, _m, m;
  cin >> n >> _m;
  for (int _n(n), i(0); i < _n; i++) cin >> a[i] >> h[i] >> L[i] >> R[i];
  for (int _n(_m), i(0); i < _n; i++) cin >> allB[i] >> allZ[i];
  for (int _n(n), i(0); i < _n; i++)
    L[i] = log((100.0 - L[i]) / 100), R[i] = log((100.0 - R[i]) / 100);
  memcpy(b + 1, allB, _m * sizeof(allB[0]));
  memset((z), (0), sizeof(z));
  sort(b + 1, b + _m + 1);
  m = unique(b + 1, b + _m + 1) - b - 1;
  b[0] = -2e9 - 100;
  b[m + 1] = 2e9 + 100;
  for (int _n(_m), i(0); i < _n; i++) {
    int j = lower_bound(b + 1, b + m + 1, allB[i]) - b;
    assert(j >= 1 && j <= m);
    z[j - 1] += allZ[i];
  }
  memset((P), (0), sizeof(P));
  for (int _n(n), i(0); i < _n; i++) {
    int l = lower_bound(b, b + m + 1, a[i] - h[i]) - b;
    int r = upper_bound(b, b + m + 1, a[i] - 1) - b - 1;
    if (l >= 1 && l <= m && r >= 1 && r <= m) {
      update(1, 0, m - 1, l - 1, r - 1, L[i]);
    }
    l = upper_bound(b, b + m + 1, a[i]) - b;
    r = upper_bound(b, b + m + 1, a[i] + h[i]) - b - 1;
    if (l >= 1 && l <= m && r >= 1 && r <= m) {
      update(1, 0, m - 1, l - 1, r - 1, R[i]);
    }
  }
  double E = 0;
  for (int _n(m), i(0); i < _n; i++) E += z[i] * exp(get(1, 0, m - 1, i));
  printf("%7f\n", E);
  return 0;
}
