#include <iostream>
#include <stdio.h>
#include <vector>
#include <cmath>

using namespace std;

void kec(int w,int h,int q)
{
    vector <int> x(w+1,h);
    int c,a,b;
    while(q--)
    {
        scanf("%d",&c);
        if(c==1)
        {
            scanf("%d %d",&a,&b);
            x[a]=max(0,min(x[a],b-1));
        }
        else
        {
            scanf("%d",&a);
            if(x[a]>0)
                printf("%d\n",x[a]);
            else
                printf("0\n");
        }
    }
}

void ispis(vector <double> &x)
{
     for(int i=0;i<x.size();i++)
        cout<<x[i]<<" ";
    cout<<endl;
}

void dvica(int w,int h,int q)
{
    vector <double> x(w+2,h);
    //ispis(x);
    int a,b,c;
    while(q--)
    {
        scanf("%d",&c);
        if(c==1)
        {
            scanf("%d %d",&a,&b);
            if(x[a]>b-2)
                x[a]=b-2;
            if(a!=0)
                if(x[a-1]>1.*b-sqrt(3))
                    x[a-1]=1.*b-sqrt(3);
            if(x[a+1]>1.*b-sqrt(3))
                x[a+1]=1.*b-sqrt(3);
        }
        else
        {
            scanf("%d",&a);
            if(x[a]>0)
                printf("%.9f\n",x[a]);
            else
                printf("0\n");
        }
        //ispis(x);
    }
}

void kvadratna(int w,int h,int r,int q)
{
    vector <double> x(w+1,h);
    int a,b,c;
    while(q--)
    {
        scanf("%d",&c);
        if(c==1)
        {
            scanf("%d %d",&a,&b);
            for(int i=max(0,a-r+1);i<w+1&&i<a+r-1;i++)
                if(b-sqrt(r*r+abs(a-i))<x[i])
                    x[i]=b-sqrt(r*r+abs(a-i));

        }
        else
        {
            scanf("%d",&a);
            if(x[a]>0){
                printf("%.9f\n",x[a]);
            }
        }
    }
}

int main()
{
    int w,h,r,q;
    scanf("%d %d %d %d",&w,&h,&r,&q);
    if(r==1)
        kec(w,h,q);
    else
        if(r==2)
            dvica(w,h,q);
        else
            kvadratna(w,h,r,q);

    return 0;
}