include Math

d, n, bounce_max = gets.split.map(&:to_i)
all_obs = (1..n).map { gets.split.map(&:to_i) }
min = Float::INFINITY

(0..bounce_max).each do |bounce|
    bounce_point = (0..bounce+1).map {|k| k * d.to_f / (bounce + 1)}
    next if bounce_point.any? {|x| all_obs.map(&:first).any?{|u| (x - u).abs < 0.00001}}

    v = sqrt(d / (bounce + 1))
    vx = vy = v / sqrt(2)

    candidates = [sqrt(d / (2 * (bounce + 1)))]

    bounce_point.each_cons(2) do |x1, x2|
        obs = all_obs.select {|x, y| x1 < x && x < x2}
        obs.each do |u, v|
            a = v.to_f / ((u - x1) * (x2 - u))
            candidates << sqrt(1 / (2 * a))
        end
    end

    candidates.select! do |vx|
        bounce_point.each_cons(2).all? do |x1, x2|
            obs = all_obs.select {|x, y| x1 < x && x < x2}
            obs.all? do |u, v|
                a = (1 / (2 * vx ** 2))
                obs.all? {|u, v| v <= a * (u - x1) * (x2 - u)}
            end
        end
    end

    next if candidates.empty?

    m = candidates.map {|vx|
        a = (1 / (2 * vx ** 2))
        vy = vx * a * d / (bounce + 1)
        hypot(vx, vy)
    }.min

    min = m if m < min
end

p min