#include <bits/stdc++.h>
using namespace std;
int n, m, tot, uni[330020];
double adr[330020];
struct Mushroom {
  int pos;
  double val;
} mur[10010];
struct Tree {
  int pos, hei;
  double l, r;
} tree[100010];
struct Seg {
  double sum, lazy;
} ln[1260010];
void build(int o, int l, int r) {
  ln[o].lazy = 1.0;
  if (l == r) {
    ln[o].sum += adr[l];
    return;
  }
  int mid = (l + r) / 2;
  build(o * 2, l, mid);
  build(o * 2 + 1, mid + 1, r);
  ln[o].sum = ln[o * 2].sum + ln[o * 2 + 1].sum;
}
void push_down(int o) {
  if (ln[o].lazy == 1.0) return;
  ln[o * 2].sum *= ln[o].lazy;
  ln[o * 2 + 1].sum *= ln[o].lazy;
  ln[o * 2].lazy *= ln[o].lazy;
  ln[o * 2 + 1].lazy *= ln[o].lazy;
  ln[o].lazy = 1.0;
}
void add(int o, int l, int r, int l1, int l2, double val) {
  if (l1 <= l && r <= l2) {
    ln[o].sum *= val;
    ln[o].lazy *= val;
    return;
  }
  push_down(o);
  int mid = (l + r) / 2;
  if (l1 <= mid) add(o * 2, l, mid, l1, l2, val);
  if (mid < l2) add(o * 2 + 1, mid + 1, r, l1, l2, val);
  ln[o].sum = ln[o * 2].sum + ln[o * 2 + 1].sum;
}
double find(int o, int l, int r, int pos) {
  if (l == r) return ln[o].sum;
  int mid = (l + r) / 2;
  push_down(o);
  if (pos <= mid)
    return find(o * 2, l, mid, pos);
  else
    return find(o * 2 + 1, mid + 1, r, pos);
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++) {
    scanf("%d%d%lf%lf", &tree[i].pos, &tree[i].hei, &tree[i].l, &tree[i].r);
    uni[++tot] = tree[i].pos;
    uni[++tot] = tree[i].pos - tree[i].hei;
    uni[++tot] = tree[i].pos + tree[i].hei;
  }
  for (int i = 1; i <= m; i++) {
    scanf("%d%lf", &mur[i].pos, &mur[i].val);
    uni[++tot] = mur[i].pos;
  }
  sort(uni + 1, uni + tot + 1);
  tot = unique(uni + 1, uni + tot + 1) - uni - 1;
  for (int i = 1; i <= m; i++) {
    int ls = lower_bound(uni + 1, uni + tot + 1, mur[i].pos) - uni;
    adr[ls] += mur[i].val;
  }
  build(1, 1, tot);
  for (int i = 1; i <= n; i++) {
    int pos = lower_bound(uni + 1, uni + tot + 1, tree[i].pos) - uni,
        l = lower_bound(uni + 1, uni + tot + 1, tree[i].pos - tree[i].hei) -
            uni,
        r = lower_bound(uni + 1, uni + tot + 1, tree[i].pos + tree[i].hei) -
            uni;
    add(1, 1, tot, l, pos - 1, 1.0 - tree[i].l / 100.00);
    add(1, 1, tot, pos + 1, r, 1.0 - tree[i].r / 100.00);
  }
  printf("%.10f\n", ln[1].sum);
  return 0;
}
