#include <bits/stdc++.h>
using namespace std;
const long long maxn = 1e5 + 5;
const long double per = 100, cns = 1;
long long n, m, a[maxn], h[maxn];
long double chp[maxn], rst[maxn];
pair<long long, long long> p[maxn];
vector<pair<long long, long long>> vec[2][maxn * 4];
vector<long double> mul[2][maxn * 4];
void build(long long v = 1, long long s = 0, long long e = n) {
  if (e - s == 1) {
    vec[0][v].push_back({a[s] + h[s], s});
    mul[0][v].push_back(cns - rst[s]);
    return;
  }
  long long mid = (e + s) / 2ll, lc = v + v, rc = lc + 1;
  build(lc, s, mid);
  build(rc, mid, e);
  long long p1 = 0, p2 = 0;
  while ((p1 < vec[0][lc].size()) && (p2 < vec[0][rc].size())) {
    if (vec[0][lc][p1].first > vec[0][rc][p2].first) {
      vec[0][v].push_back(vec[0][lc][p1]);
      p1++;
    } else {
      vec[0][v].push_back(vec[0][rc][p2]);
      p2++;
    }
  }
  while (p1 < vec[0][lc].size()) {
    vec[0][v].push_back(vec[0][lc][p1]);
    p1++;
  }
  while (p2 < vec[0][rc].size()) {
    vec[0][v].push_back(vec[0][rc][p2]);
    p2++;
  }
  mul[0][v].push_back(cns - rst[vec[0][v][0].second]);
  for (long long i = 1; i < vec[0][v].size(); i++)
    mul[0][v].push_back((cns - rst[vec[0][v][i].second]) * mul[0][v].back());
}
void build2(long long v = 1, long long s = 0, long long e = n) {
  if (e - s == 1) {
    vec[1][v].push_back({a[s] - h[s], s});
    mul[1][v].push_back(cns - chp[s]);
    return;
  }
  long long mid = (e + s) / 2ll, lc = v + v, rc = lc + 1;
  build2(lc, s, mid);
  build2(rc, mid, e);
  long long p1 = 0, p2 = 0;
  while ((p1 < vec[1][lc].size()) && (p2 < vec[1][rc].size())) {
    if (vec[1][lc][p1].first < vec[1][rc][p2].first) {
      vec[1][v].push_back(vec[1][lc][p1]);
      p1++;
    } else {
      vec[1][v].push_back(vec[1][rc][p2]);
      p2++;
    }
  }
  while (p1 < vec[1][lc].size()) {
    vec[1][v].push_back(vec[1][lc][p1]);
    p1++;
  }
  while (p2 < vec[1][rc].size()) {
    vec[1][v].push_back(vec[1][rc][p2]);
    p2++;
  }
  mul[1][v].push_back(cns - chp[vec[1][v][0].second]);
  for (long long i = 1; i < vec[1][v].size(); i++)
    mul[1][v].push_back((cns - chp[vec[1][v][i].second]) * mul[1][v].back());
}
long double get(long long l, long long r, long long x, long long v = 1,
                long long s = 0, long long e = n) {
  if ((l >= e) || (r <= s)) return cns;
  if ((l <= s) && (e <= r)) {
    if (vec[1][v][0].first > x) return cns;
    if (vec[1][v].back().first <= x) return mul[1][v].back();
    long long l1 = 0, r1 = vec[1][v].size() - 1;
    while (l1 != (r1 - 1ll)) {
      long long mid = (l1 + r1) / 2ll;
      if (vec[1][v][mid].first > x)
        r1 = mid;
      else
        l1 = mid;
    }
    return mul[1][v][l1];
  }
  long long mid = (e + s) / 2ll, lc = v + v, rc = lc + 1;
  return get(l, r, x, lc, s, mid) * get(l, r, x, rc, mid, e);
}
long double get2(long long l, long long r, long long x, long long v = 1,
                 long long s = 0, long long e = n) {
  if ((l >= e) || (r <= s)) return cns;
  if ((l <= s) && (e <= r)) {
    if (vec[0][v][0].first < x) return cns;
    if (vec[0][v].back().first >= x) return mul[0][v].back();
    long long l1 = 0, r1 = vec[0][v].size() - 1;
    while (l1 != (r1 - 1ll)) {
      long long mid = (l1 + r1) / 2ll;
      if (vec[0][v][mid].first < x)
        r1 = mid;
      else
        l1 = mid;
    }
    return mul[0][v][l1];
  }
  long long mid = (e + s) / 2ll, lc = v + v, rc = lc + 1;
  return get2(l, r, x, lc, s, mid) * get2(l, r, x, rc, mid, e);
}
long double solve(long long x) {
  long double a1, a2;
  if (x >= a[n - 1])
    a1 = cns;
  else {
    if (a[0] > x)
      a1 = get(0, n, x);
    else {
      long long l = 0, r = n - 1;
      while (l != r - 1) {
        long long mid = (l + r) / 2ll;
        if (a[mid] > x)
          r = mid;
        else
          l = mid;
      }
      a1 = get(r, n, x);
    }
  }
  if (x <= a[0])
    a2 = 1;
  else {
    if (a[n - 1] < x)
      a2 = get2(0, n, x);
    else {
      long long l = 0, r = n - 1;
      while (l != r - 1) {
        long long mid = (l + r) / 2ll;
        if (a[mid] < x)
          l = mid;
        else
          r = mid;
      }
      a2 = get2(0, r, x);
    }
  }
  return a1 * a2;
}
int main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  vector<pair<pair<long long, long long>, pair<long double, long double>>> V;
  cin >> n >> m;
  for (long long i = 0; i < n; i++) {
    cin >> a[i] >> h[i] >> chp[i] >> rst[i];
    rst[i] /= per;
    chp[i] /= per;
    V.push_back({{a[i], h[i]}, {chp[i], rst[i]}});
  }
  sort(V.begin(), V.end());
  for (long long i = 0; i < n; i++) {
    a[i] = V[i].first.first;
    h[i] = V[i].first.second;
    chp[i] = V[i].second.first;
    rst[i] = V[i].second.second;
  }
  build();
  build2();
  long double ans = 0;
  for (long long i = 0; i < m; i++) {
    long long x;
    long double z;
    cin >> x >> z;
    ans += z * solve(x);
  }
  cout << fixed << setprecision(6) << ans;
}
