1 #include <cstdio>
2 #include <iostream>
3 #include <set>
4 using namespace std;
5 struct edge { int l,r,v; }a,b,t;
6 struct cmp { bool operator()(const edge &a,const edge &b) { return a.l<b.l; } };
7 int m,ans,inf=1000000010;
8 long long c,tot;
9 char str[10];
10 set<edge,cmp>Q;
11 int main()
12 {
13 freopen("cellphone.in","r",stdin);
14 freopen("cellphone.out","w",stdout);
15 scanf("%d%lld",&m,&c);
16 for(int i=1;i<=m;i++)
17 {
18 scanf("%s",str);
19 if (str[0]=='c')
20 {
21 scanf("%d%d%d",&a.l,&a.r,&a.v);
22 a.r=a.r-(a.r-a.l)%a.v; b=a;
23 set<edge,cmp>::iterator k=Q.lower_bound(b);
24 if (k!=Q.begin())
25 {
26 k--;b=*k;
27 if (b.r>=a.l)
28 {
29 Q.erase(k);
30 t=b; t.r=a.l-1-(a.l-1-t.l)%t.v; Q.insert(t);
31 t=b; t.l=a.r+1+(t.r-a.r-1)%t.v; Q.insert(t);
32 }
33 }
34 Q.insert(a);
35 }
36 if (str[0]=='d')
37 {
38 scanf("%d%d",&a.l,&a.r);
39 set<edge,cmp>::iterator k=Q.lower_bound(a);
40 set<edge,cmp>::iterator p;
41 if (k!=Q.begin())
42 {
43 k--;p=k++;b=*p;
44 if (b.r>=a.l)
45 {
46 Q.erase(p);
47 t=b; t.r=a.l-1-(a.l-1-t.l)%t.v; Q.insert(t);
48 if (b.r>a.r)
49 {
50 t=b; t.l=a.r+1+(t.r-a.r-1)%t.v; Q.insert(t);
51 continue;
52 }
53 }
54 }
55 b=*k;
56 for (;k!=Q.end()&&b.l<=a.r;)
57 {
58 p=k++; Q.erase(p);
59 if (b.r>a.r)
60 {
61 b.l=a.r+1+(b.r-a.r-1)%b.v; Q.insert(b);
62 break;
63 }
64 b=*k;
65 }
66 }
67 if (str[0]=='q')
68 {
69 scanf("%d",&a.l);
70 if (Q.empty()) { printf("0\n"); continue; }
71 set<edge,cmp>::iterator k=Q.lower_bound(a);
72 ans=inf;
73 if (k!=Q.end()) b=*k,ans=b.l-a.l;
74 if (k!=Q.begin()) k--;
75 b=*k;
76 if (b.l<=a.l)
77 {
78 if (b.r<=a.l) ans=min(ans,a.l-b.r);
79 else ans=min(ans,min((a.l-b.l)%b.v,(b.r-a.l)%b.v));
80 }
81 printf("%lld\n",(c-1ll*ans*1ll*ans)>0?(c-1ll*ans*1ll*ans):0);
82 }
83 }
84 return 0;
85 }