#include <bits/stdc++.h>
using namespace std;
int mid(int i, int j) { return (i + j) / 2; }
int left(int i) { return i * 2; }
int right(int i) { return i * 2 + 1; }
pair<pair<int, int>, pair<int, int> > a[100000 + 2];
pair<int, int> b[10000 + 2];
int m;
int n;
double tree[40000];
void upd(int i, int s, int e, int s1, int e1, double v) {
  if (s1 > e || s > e1) return;
  if (s >= s1 && e <= e1) {
    tree[i] *= v;
    return;
  }
  tree[left(i)] *= tree[i];
  tree[right(i)] *= tree[i];
  tree[i] = 1.0;
  upd(left(i), s, mid(s, e), s1, e1, v);
  upd(right(i), mid(s, e) + 1, e, s1, e1, v);
}
int lower(int k) {
  int u = m - 1;
  int l = 0;
  int mi = 100000000;
  while (u - l > 3) {
    int mm = mid(u, l);
    if (b[mm].first >= k) {
      u = mm;
      mi = min(mi, mm);
    } else
      l = mm;
  }
  for (int i = l; i <= u; i++) {
    if (b[i].first >= k) mi = min(mi, i);
  }
  return mi;
}
int upper(int k) {
  int u = m - 1;
  int l = 0;
  int mi = -100000000;
  while (u - l > 3) {
    int mm = mid(u, l);
    if (b[mm].first <= k) {
      l = mm;
      mi = max(mi, mm);
    } else
      u = mm;
  }
  for (int i = l; i <= u; i++) {
    if (b[i].first <= k) mi = max(mi, i);
  }
  return mi;
}
double ans;
void get(int i, int s, int e) {
  if (s == e) {
    ans += b[s].second * tree[i];
    return;
  }
  tree[left(i)] *= tree[i];
  tree[right(i)] *= tree[i];
  tree[i] = 1.0;
  get(left(i), s, mid(s, e));
  get(right(i), mid(s, e) + 1, e);
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n; i++)
    scanf("%d%d%d%d", &a[i].first.first, &a[i].first.second, &a[i].second.first,
          &a[i].second.second);
  for (int i = 0; i < m; i++) scanf("%d%d", &b[i].first, &b[i].second);
  sort(b, b + m);
  for (int i = 0; i < 40000; i++) tree[i] = 1.0;
  for (int i = 0; i < n; i++) {
    int k1 = upper(a[i].first.first - 1);
    int k2 = lower(a[i].first.first - a[i].first.second);
    if (!(k1 == -100000000 || k2 == 100000000)) {
      upd(1, 0, m - 1, k2, k1, (100 - a[i].second.first) * 0.01);
    }
    k1 = upper(a[i].first.first + a[i].first.second);
    k2 = lower(a[i].first.first + 1);
    if (!(k1 == -100000000 || k2 == 100000000)) {
      upd(1, 0, m - 1, k2, k1, (100 - a[i].second.second) * 0.01);
    }
  }
  ans = 0.0;
  get(1, 0, m - 1);
  printf("%6lf", ans);
}
