#include <bits/stdc++.h>
using namespace std;
struct tree {
  int a;
  int h;
  double li;
  double ri;
};
struct mr {
  int b;
  int z;
};
tree trees[100010];
mr mrs[100010];
int n, m, cnt;
double p[100010 << 4];
int ps[100010 * 5];
void push_down(int rt) {
  p[rt << 1] *= p[rt];
  p[rt << 1 | 1] *= p[rt];
  p[rt] = 1;
}
void build(int left, int right, int rt) {
  p[rt] = 1;
  if (left == right) return;
  int mid = (left + right) >> 1;
  build(left, mid, rt << 1);
  build(mid + 1, right, rt << 1 | 1);
}
void update(int L, int R, double val, int left, int right, int rt) {
  if (right < L || left > R) return;
  if (left >= L && right <= R) {
    p[rt] *= val;
    return;
  }
  if (p[rt] != 1) push_down(rt);
  int mid = (left + right) >> 1;
  if (mid >= R)
    update(L, R, val, left, mid, rt << 1);
  else if (mid < L)
    update(L, R, val, mid + 1, right, rt << 1 | 1);
  else {
    update(L, R, val, left, mid, rt << 1);
    update(L, R, val, mid + 1, right, rt << 1 | 1);
  }
}
double query(int pos, int left, int right, int rt) {
  if (left == right) {
    return p[rt];
  }
  int mid = (left + right) >> 1;
  if (p[rt] != 1) push_down(rt);
  if (pos <= mid) {
    return query(pos, left, mid, rt << 1);
  } else
    return query(pos, mid + 1, right, rt << 1 | 1);
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  while (cin >> n >> m) {
    cnt = 0;
    for (int i = 0; i < n; i++) {
      cin >> trees[i].a >> trees[i].h >> trees[i].li >> trees[i].ri;
      trees[i].li = 1 - trees[i].li / 100.0;
      trees[i].ri = 1 - trees[i].ri / 100.0;
      ps[cnt++] = trees[i].a;
      ps[cnt++] = trees[i].a + trees[i].h;
      ps[cnt++] = trees[i].a - trees[i].h;
    }
    for (int i = 0; i < m; i++) {
      cin >> mrs[i].b >> mrs[i].z;
      ps[cnt++] = mrs[i].b;
    }
    sort(ps, ps + cnt);
    cnt = unique(ps, ps + cnt) - ps;
    build(0, cnt, 1);
    int lp1, lp2, rp1, rp2;
    for (int i = 0; i < n; i++) {
      lp1 = lower_bound(ps, ps + cnt, trees[i].a - trees[i].h) - ps;
      rp1 = lp2 = lower_bound(ps, ps + cnt, trees[i].a) - ps;
      rp2 = lower_bound(ps, ps + cnt, trees[i].a + trees[i].h) - ps;
      update(lp1, lp2 - 1, trees[i].li, 0, cnt - 1, 1);
      update(rp1 + 1, rp2, trees[i].ri, 0, cnt - 1, 1);
    }
    double ans = 0;
    int k;
    for (int i = 0; i < m; i++) {
      k = lower_bound(ps, ps + cnt, mrs[i].b) - ps;
      ans += query(k, 0, cnt - 1, 1) * mrs[i].z;
    }
    cout << fixed << setprecision(10) << ans << endl;
  }
}
