#include <bits/stdc++.h>
using namespace std;
struct Seg {
  int N;
  double T[2000000];
  void build(int i, int l, int r) {
    T[i] = 1;
    if (l == r) return;
    int mid = l + r >> 1, ls = i << 1, rs = ls | 1;
    build(ls, l, mid);
    build(rs, mid + 1, r);
  }
  void ins(int i, int l, int r, int x, int y, double d) {
    if (y < l || r < x) return;
    if (x <= l && r <= y) {
      T[i] *= d;
      return;
    }
    int mid = l + r >> 1, ls = i << 1, rs = ls | 1;
    ins(ls, l, mid, x, y, d);
    ins(rs, mid + 1, r, x, y, d);
  }
  double get(int i, int l, int r, int x) {
    if (l == r) return T[i];
    int mid = l + r >> 1, ls = i << 1, rs = ls | 1;
    if (x <= mid)
      return T[i] * get(ls, l, mid, x);
    else
      return T[i] * get(rs, mid + 1, r, x);
  }
};
Seg T;
int a[110000], h[110000], l[110000], r[110000], b[110000], w[110000];
vector<int> co;
map<int, int> pp;
int main() {
  int N, M, i;
  cin >> N >> M;
  co.push_back(-2100000000);
  for (i = 1; i <= N; i++) {
    cin >> a[i] >> h[i] >> l[i] >> r[i];
    co.push_back(a[i] - h[i]);
    co.push_back(a[i] - 1);
    co.push_back(a[i] + h[i]);
    co.push_back(a[i] + 1);
  }
  for (i = 1; i <= M; i++) {
    cin >> b[i] >> w[i];
    co.push_back(b[i]);
  }
  sort(co.begin(), co.end());
  co.resize(unique(co.begin(), co.end()) - co.begin());
  for (i = 1; i < co.size(); i++) pp[co[i]] = i;
  int L = co.size();
  T.build(1, 1, L);
  for (i = 1; i <= N; i++) {
    T.ins(1, 1, L, pp[a[i] - h[i]], pp[a[i] - 1], 1.0 - double(l[i]) / 100);
    T.ins(1, 1, L, pp[a[i] + 1], pp[a[i] + h[i]], 1.0 - double(r[i]) / 100);
  }
  double ans = 0;
  for (i = 1; i <= M; i++) ans += T.get(1, 1, L, pp[b[i]]) * w[i];
  printf("%.12f\n", ans);
}
