#include <bits/stdc++.h>
using namespace std;
const int MAXN = 5e5 + 10;
int n, m, a[MAXN], h[MAXN], b[MAXN], z[MAXN], cnt = 0;
long double pl[MAXN], pr[MAXN], seg[MAXN * 4];
set<int> st;
vector<int> vec;
inline long double merge(long double x, long double y) {
  return (x + y - x * y);
}
void add(long double val, int l, int r, int b = 0, int e = cnt, int ind = 1) {
  if (r <= b || e <= l) return;
  if (l <= b && r >= e) {
    seg[ind] = merge(seg[ind], val);
    return;
  }
  int mid = (b + e) / 2;
  add(val, l, r, b, mid, ind * 2);
  add(val, l, r, mid, e, ind * 2 + 1);
  return;
}
long double get(int x, int b = 0, int e = cnt, int ind = 1) {
  long double ret = seg[ind];
  if (b + 1 == e) return ret;
  int mid = (b + e) / 2;
  if (x < mid)
    ret = merge(ret, get(x, b, mid, ind * 2));
  else
    ret = merge(ret, get(x, mid, e, ind * 2 + 1));
  return ret;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cout << fixed << setprecision(10);
  cin >> n >> m;
  for (int i = 0; i < n; i++) {
    cin >> a[i] >> h[i] >> pl[i] >> pr[i];
    pl[i] /= (long double)100;
    pr[i] /= (long double)100;
    st.insert(a[i]);
    st.insert(a[i] + h[i]);
    st.insert(a[i] - h[i]);
  }
  for (int i = 0; i < m; i++) {
    cin >> b[i] >> z[i];
    st.insert(b[i]);
  }
  while (!st.empty()) {
    vec.push_back(*st.begin());
    st.erase(*st.begin());
  }
  cnt = (int)vec.size();
  for (int i = 0; i < n; i++) {
    int ptl = lower_bound(vec.begin(), vec.end(), (a[i] - h[i])) - vec.begin();
    int ptr = lower_bound(vec.begin(), vec.end(), a[i]) - vec.begin();
    add(pl[i], ptl, ptr);
    ptl = ptr + 1;
    ptr = lower_bound(vec.begin(), vec.end(), (a[i] + h[i])) - vec.begin() + 1;
    add(pr[i], ptl, ptr);
  }
  long double ans = 0;
  for (int i = 0; i < m; i++) {
    int pt = lower_bound(vec.begin(), vec.end(), b[i]) - vec.begin();
    long double perc = (long double)get(pt);
    perc = (long double)1 - perc;
    ans += ((long double)z[i] * perc);
  }
  cout << ans << '\n';
  return 0;
}
