#include <bits/stdc++.h>   using namespace std;   const long long MOD = 1000000000;   const int MAX = 100005;   const int RIGHT = 131072;   const int SIZE = 263000;   double L[MAX], R[MAX], T[SIZE];   int X[MAX], H[MAX], N, M;   pair<int, int> Mush[MAX];   void update(int l, int r, double p, int n, int a, int b) {     if (a > r || b < l) return;     if (a >= l && b <= r) {       T[n] *= p;       return;     }     int mid = (a + b) / 2;     update(l, r, p, 2 * n, a, mid);     update(l, r, p, 2 * n + 1, mid + 1, b);   }   double query(int x, int n, int a, int b) {     if (a > x || b < x) return 1.0;     if (a == b) return T[n];     int mid = (a + b) / 2;     return T[n] * query(x, 2 * n, a, mid) * query(x, 2 * n + 1, mid + 1, b);   }   int main() {     scanf( %d%d , &N, &M);     for (int i = (1); i <= (N); i++)       scanf( %d%d%lf%lf , &X[i], &H[i], &L[i], &R[i]);     for (int i = (1); i <= (N); i++) L[i] /= 100.0, R[i] /= 100.0;     for (int i = (1); i <= (M); i++)       scanf( %d%d , &Mush[i].first, &Mush[i].second);     sort(Mush + 1, Mush + 1 + M);     for (int i = (1); i <= (SIZE - 1); i++) T[i] = 1.0;     for (int i = (1); i <= (N); i++) {       int a, b;       a = lower_bound(Mush + 1, Mush + M + 1, make_pair(X[i] - H[i], 0)) - Mush;       b = lower_bound(Mush + 1, Mush + M + 1, make_pair(X[i], 0)) - Mush - 1;       update(a, b, 1.0 - L[i], 1, 1, RIGHT);       a = upper_bound(Mush + 1, Mush + M + 1, make_pair(X[i], 1000000005)) - Mush;       b = upper_bound(Mush + 1, Mush + M + 1,                       make_pair(X[i] + H[i], 1000000005)) -           Mush - 1;       update(a, b, 1.0 - R[i], 1, 1, RIGHT);     }     double ans = 0;     for (int i = (1); i <= (M); i++)       ans += query(i, 1, 1, RIGHT) * Mush[i].second;     cout << setprecision(15) << fixed << ans;   }   