#include <bits/stdc++.h>
using namespace std;
const double EPS = 1e-8;
int h[100005];
struct stree {
  int l, r;
  double c, m;
} a[100005 * 3];
void create(int l, int r, int p) {
  a[p].l = l;
  a[p].r = r;
  a[p].m = a[p].c = 1;
  if (l == r) {
    a[p].m = 1;
    return;
  }
  int mid = (l + r) >> 1;
  create(l, mid, p * 2);
  create(mid + 1, r, p * 2 + 1);
}
void pushdown(int p) {
  if (abs(a[p].c - 1.0) <= EPS) return;
  a[p * 2].c *= a[p].c;
  a[p * 2 + 1].c *= a[p].c;
  a[p * 2].m *= a[p].c;
  a[p * 2 + 1].m *= a[p].c;
  a[p].c = 1.0;
}
void update(int l, int r, double v, int p) {
  if (r < l) return;
  if (a[p].l == l && a[p].r == r) {
    a[p].c *= v;
    a[p].m *= v;
    return;
  }
  pushdown(p);
  int mid = (a[p].l + a[p].r) >> 1;
  if (r <= mid)
    update(l, r, v, p * 2);
  else if (l > mid)
    update(l, r, v, p * 2 + 1);
  else {
    update(l, mid, v, p * 2);
    update(mid + 1, r, v, p * 2 + 1);
  }
}
double ans;
int power[100005];
void solve(int p) {
  if (a[p].l == a[p].r) {
    ans += a[p].m * power[a[p].l];
    return;
  }
  pushdown(p);
  solve(p * 2);
  solve(p * 2 + 1);
}
double get(int x, int p) {
  if (a[p].l == x && a[p].r == x) return a[p].m;
  pushdown(p);
  int mid = (a[p].r + a[p].l) >> 1;
  if (x <= mid)
    return get(x, p * 2);
  else
    return get(x, p * 2 + 1);
}
struct node {
  int a, h, l, r;
} s[100005];
struct nod {
  int id, b, p;
} r[100005];
int n, m;
int main() {
  scanf("%d %d", &n, &m);
  for (int i = 1; i <= n; i++) {
    scanf("%d %d %d %d", &s[i].a, &s[i].h, &s[i].l, &s[i].r);
  }
  int x, y;
  for (int i = 1; i <= m; i++) {
    scanf("%d %d", &x, &y);
    r[i].id = i;
    r[i].b = h[i] = x;
    r[i].p = y;
  }
  int l;
  sort(h + 1, h + 1 + m);
  l = unique(h + 1, h + 1 + m) - (h + 1);
  memset(power, 0, sizeof(power));
  for (int i = 1; i <= m; i++) {
    x = lower_bound(h + 1, h + 1 + l, r[i].b) - h;
    power[x] += r[i].p;
  }
  create(1, l, 1);
  for (int i = 1; i <= n; i++) {
    x = upper_bound(h + 1, h + 1 + l, s[i].a) - h;
    y = upper_bound(h + 1, h + 1 + l, s[i].a + s[i].h) - h;
    update(x, y - 1, 1 - s[i].r / 100.0, 1);
    x = lower_bound(h + 1, h + 1 + l, s[i].a) - h;
    y = lower_bound(h + 1, h + 1 + l, s[i].a - s[i].h) - h;
    update(y, x - 1, 1 - s[i].l / 100.0, 1);
  }
  ans = 0;
  solve(1);
  printf("%.5lf\n", ans);
  return 0;
}
