#include "bits/stdc++.h"
#define rep(i,a,n) for(int i=a;i<=n;i++)
#define per(i,a,n) for(int i=n;i>=a;i--)
#define pb push_back
#define mp make_pair
#define FI first
#define SE second
#define maxn 200010
#define mod 998244353
#define inf 0x3f3f3f3f
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
typedef vector<int> vi;
typedef double db;

int sta[maxn+5];
vi last[maxn+5];
set<int> *S[maxn+5];

struct segtree
{
    #define ls rt*2
    #define rs rt*2+1
    ll a[maxn*4+5],lz[maxn*4+5];
    void push(int rt,ll x)
    {
        a[rt]+=x; lz[rt]+=x;
        if(a[rt]>1ll<<60) a[rt]=1ll<<60;
    }
    void pu(int rt)
    {
        a[rt]=min(a[ls],a[rs]);
    }
    void pd(int rt)
    {
        if(lz[rt])
        {
            push(ls,lz[rt]);
            push(rs,lz[rt]);
            lz[rt]=0;
        }
    }
    void add(int rt,int l,int r,int ql,int qr,ll x)
    {
        if(ql<=l && r<=qr)
        {
            push(rt,x); return;
        }
        if(r<ql || qr<l) return;
        pd(rt);
        int mid=(l+r)>>1;
        add(ls,l,mid,ql,qr,x);
        add(rs,mid+1,r,ql,qr,x);
        pu(rt);
    }
    ll ask(int rt,int l,int r,int ql,int qr)
    {
        if(ql<=l && r<=qr) return a[rt];
        if(r<ql || qr<l) return 1ll<<60;
        pd(rt);
        int mid=(l+r)>>1;
        return min(ask(ls,l,mid,ql,qr),ask(rs,mid+1,r,ql,qr));
    }
}T;

int main()
{
    int n,s; scanf("%d%d",&n,&s);
    int R=0,top=0,L=1;
    last[0].pb(++R);
    sta[++top]=1;
    S[1]=new(set<int>);
    S[1]->insert(0);
    rep(i,1,n)
    {
        char op[6]; scanf("%s",op);
        if(op[0]=='s') 
        {
            int y,v; scanf("%d%d",&y,&v);
            ll x=T.ask(1,1,n+1,L,R);
            T.add(1,1,n+1,L,R,v);
            R++;
            if(y==s) x=1ll<<60;
            T.add(1,1,n+1,R,R,x);
            if(last[y].size() && last[y].back()>=L)
            {
                T.add(1,1,n+1,last[y].back(),last[y].back(),1ll<<60);
                last[y].pop_back();
            }
            last[y].pb(R);
            S[top]->insert(y);
        }
        else if(op[0]=='i') 
        {
            int y; scanf("%d",&y);
            ll x=1ll<<60;
            if(last[y].size() && last[y].back()>=L)
            {
                int pos=last[y].back(); last[y].pop_back();
                x=T.ask(1,1,n+1,pos,pos);
                T.add(1,1,n+1,pos,pos,1ll<<60);
            }
            R++;
            T.add(1,1,n+1,R,R,x);
            last[y].pb(R);
            L=R;
            sta[++top]=L;
            S[top]=new(set<int>);
            S[top]->insert(y);
        }
        else if(op[0]=='e')
        {
            L=sta[--top];
            if(S[top+1]->size()>S[top]->size()) swap(S[top],S[top+1]);
            for(auto y: *(S[top+1]))
            {
                ll x=1ll<<61;
                int pos=0;
                while(last[y].size() && last[y].back()>=L)
                {
                    int pos_tmp=last[y].back(); last[y].pop_back();
                    ll xx=T.ask(1,1,n+1,pos_tmp,pos_tmp);
                    if(xx<x) 
                    {
                        if(pos) T.add(1,1,n+1,pos,pos,1ll<<60);
                        pos=pos_tmp,x=xx; 
                    }
                    else T.add(1,1,n+1,pos_tmp,pos_tmp,1ll<<60);
                }
                assert(pos);
                last[y].pb(pos);
                S[top]->insert(y);
            }
            delete(S[top+1]);
        }
        else assert(0);
    }
    assert(L==1);
    printf("%lld\n",T.ask(1,1,n+1,L,R));
    return 0;
}