#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:16777216")
using namespace std;
template <class T>
void pv(T a, T b) {
  for (T i = a; i != b; ++i) cout << *i << " ";
  cout << endl;
}
const double eps = 1e-10;
const int inf = 0x3f3f3f3f;
const long long INF = 0x3f3f3f3f3f3f3f3fLL;
const int maxn = 5e5 + 1e4 + 100;
double tree[4 * maxn];
map<int, int> mx;
int a[maxn], h[maxn], l[maxn], r[maxn], n;
int b[maxn], z[maxn], m;
void mult(int i, int j, double p, int no, int ini, int fim) {
  if (j < ini || fim < i) return;
  if (i <= ini && fim <= j)
    tree[no] *= p;
  else {
    int med = (ini + fim) / 2;
    mult(i, j, p, 2 * no, ini, med);
    mult(i, j, p, 2 * no + 1, med + 1, fim);
  }
}
double query(int i, int no, int ini, int fim) {
  if (i < ini || fim < i) return 1.0;
  double p = tree[no];
  if (ini != fim) {
    int med = (ini + fim) / 2;
    p *= query(i, 2 * no, ini, med);
    p *= query(i, 2 * no + 1, med + 1, fim);
  }
  return p;
}
int main() {
  cin.sync_with_stdio(false);
  for (int(i) = (0); (i) < (4 * maxn); (i)++) tree[i] = 1.0;
  cin >> n >> m;
  for (int(i) = (0); (i) < (n); (i)++) {
    cin >> a[i] >> h[i] >> l[i] >> r[i];
    mx[a[i]] = mx[a[i] - 1] = mx[a[i] + 1] = mx[a[i] + h[i]] = mx[a[i] - h[i]] =
        1;
  }
  for (int(i) = (0); (i) < (m); (i)++) {
    cin >> b[i] >> z[i];
    mx[b[i]] = 1;
  }
  int N = 0;
  for (map<int, int>::iterator i = mx.begin(); i != mx.end(); i++)
    i->second = N++;
  N--;
  for (int(i) = (0); (i) < (n); (i)++) {
    int stay = 100 - l[i] - r[i];
    mult(mx[a[i] - h[i]], mx[a[i] - 1], (100 - l[i]) / 100.0, 1, 0, N);
    mult(mx[a[i] + 1], mx[a[i] + h[i]], (100 - r[i]) / 100.0, 1, 0, N);
  }
  double res = 0.0;
  for (int(i) = (0); (i) < (m); (i)++) res += query(mx[b[i]], 1, 0, N) * z[i];
  cout << fixed << setprecision(6) << res << endl;
  return 0;
}
