#include <cstdio>
#include <iostream>
#include <vector>
#include <algorithm>
#include <utility>
#include <cmath>
#include <complex>
#include <cfloat>
using namespace std;
 
void intrx(vector<double> &v, double w, double a1, double p1, double q1, double a2, double p2, double q2){
    double A = a1 - a2;
    double B = a2 * p2 - a1 * p1;
    double C = a1 * p1 * p1 + q1 - a2 * p2 * p2 - q2;
    double D = B * B - A * C;
     
    if(abs(A) < 1e-9){
        double x = -0.5 * C / B;
        if(x > 0.0 && x < w){ v.push_back(x); }
    }
    else if(D >= 0.0){
        D = sqrt(D);
         
        double x;
        x = (-B - D) / A;
        if(x > 0.0 && x < w){ v.push_back(x); }
        x = (-B + D) / A;
        if(x > 0.0 && x < w){ v.push_back(x); }
    }
}
 
void aty(vector<double> &v, double w, double a, double p, double q, double y){
    double t = (y - q) / a;
    if(t >= 0.0){
        t = sqrt(t);
        double x;
         
        x = p + t;
        if(x > 0.0 && x < w){ v.push_back(x); }
        x = p - t;
        if(x > 0.0 && x < w){ v.push_back(x); }
    }
}
 
double integ(double a, double p, double x){
    double rt = sqrt((x - p) * (x - p) + 0.25 / (a * a));
    return abs(a) * ((x - p) * rt + log(abs(x - p + rt)) / (4.0 * a * a));
}
 
double length(double a, double p, double x1, double x2){
    return integ(a, p, x2) - integ(a, p, x1);
}
 
int main(){
    int n;
    double w, h, x, y;
    scanf("%lf%lf%d", &w, &h, &n);
     
    vector<double> a(n), p(n), q(n);
    for(int i = 0; i < n; ++i){
        scanf("%lf%lf%lf", &a[i], &p[i], &q[i]);
    }
     
    vector<double> xs;
    xs.push_back(0.0);
    xs.push_back(w);
     
    for(int i = 0; i < n; ++i){
        for(int j = i + 1; j < n; ++j){
            intrx(xs, w, a[i], p[i], q[i], a[j], p[j], q[j]);
        }
         
        aty(xs, w, a[i], p[i], q[i], 0.0);
        aty(xs, w, a[i], p[i], q[i], h);
    }
     
    sort(xs.begin(), xs.end());
    xs.erase(unique(xs.begin(), xs.end()), xs.end());
     
    double sum = 0.0;
    for(int i = 1; i < xs.size(); ++i){
        double mid = (xs[i-1] + xs[i]) * 0.5;
        double maxy = -1e300;
        int idx = -1;
         
        for(int j = 0; j < n; ++j){
            double y = a[j] * (mid - p[j]) * (mid - p[j]) + q[j];
            if(maxy < y){
                maxy = y;
                idx = j;
            }
        }
         
        if(maxy > 0.0 && maxy < h){
            sum += length(a[idx], p[idx], xs[i-1], xs[i]);
        }
    }
     
    printf("%.15f\n", sum);
}