#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
struct Query{
int type;
int i , w , v;
int W;
};
struct Item{
int number , weight , value;
};
#define INF (1<<28)
#define iMax (3000)
#define wMax (10000)
#define qMax (300)
Item item[iMax];
int position[iMax];
Query query[qMax];
bool important[iMax];
int dp[iMax+1][wMax+1];
bool is_important(const Item &a,const Item &b){ return important[a.number] < important[b.number]; }
int main(){
int N,Q,C=0;
cin >> N >> Q;
for(int i = 0 ; i < N ; i++){
item[i].number = i;
cin >> item[i].weight >> item[i].value;
}
for(int i = 0 ; i < Q ; i++){
cin >> query[i].type;
if(query[i].type == 0){
cin >> query[i].W;
}else{
cin >> query[i].i >> query[i].w >> query[i].v;
important[--query[i].i] = true;
}
}
C = count(important,important+N,true);
sort(item,item+N,is_important);
for(int i = 0 ; i < N ; i++) position[item[i].number] = i;
for(int i = 0 ; i <= N ; i++) for(int j = 0 ; j <= wMax ; j++) dp[i][j] = -INF;
dp[0][0] = 0;
for(int i = 0 ; i < N ; i++){
for(int j = 0 ; j <= wMax ; j++){
dp[i+1][j] = dp[i][j];
if(j) dp[i+1][j] = max(dp[i+1][j],dp[i+1][j-1]);
if(j-item[i].weight >= 0){
dp[i+1][j] = max(dp[i+1][j],dp[i][j-item[i].weight]+item[i].value);
}
}
}
for(int q = 0 ; q < Q ; q++){
if(query[q].type == 0) cout << dp[N][query[q].W] << endl;
else{
item[position[query[q].i]].weight = query[q].w ;
item[position[query[q].i]].value = query[q].v ;
for(int i = N-C ; i < N ; i++){
for(int j = 0 ; j <= wMax ; j++){
dp[i+1][j] = dp[i][j];
if(j) dp[i+1][j] = max(dp[i+1][j],dp[i+1][j-1]);
if(j-item[i].weight >= 0){
dp[i+1][j] = max(dp[i+1][j],dp[i][j-item[i].weight]+item[i].value);
}
}
}
}
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8Y3N0ZGlvPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IFF1ZXJ5ewoJaW50IHR5cGU7CglpbnQgaSAsIHcgLCB2OwoJaW50IFc7Cn07CnN0cnVjdCBJdGVtewoJaW50IG51bWJlciAsIHdlaWdodCAsIHZhbHVlOwp9OwoKI2RlZmluZSBJTkYgKDE8PDI4KQoKI2RlZmluZSBpTWF4ICgzMDAwKQojZGVmaW5lIHdNYXggKDEwMDAwKQojZGVmaW5lIHFNYXggKDMwMCkKSXRlbSBpdGVtW2lNYXhdOwppbnQgcG9zaXRpb25baU1heF07ClF1ZXJ5IHF1ZXJ5W3FNYXhdOwpib29sIGltcG9ydGFudFtpTWF4XTsKCmludCBkcFtpTWF4KzFdW3dNYXgrMV07CgoKYm9vbCBpc19pbXBvcnRhbnQoY29uc3QgSXRlbSAmYSxjb25zdCBJdGVtICZiKXsgcmV0dXJuIGltcG9ydGFudFthLm51bWJlcl0gPCBpbXBvcnRhbnRbYi5udW1iZXJdOyB9CgppbnQgbWFpbigpewoJaW50IE4sUSxDPTA7CgljaW4gPj4gTiA+PiBROwoJZm9yKGludCBpID0gMCA7IGkgPCBOIDsgaSsrKXsKCQlpdGVtW2ldLm51bWJlciA9IGk7CgkJY2luID4+IGl0ZW1baV0ud2VpZ2h0ID4+IGl0ZW1baV0udmFsdWU7Cgl9CgkKCWZvcihpbnQgaSA9IDAgOyBpIDwgUSA7IGkrKyl7CgkJY2luID4+IHF1ZXJ5W2ldLnR5cGU7CgkJaWYocXVlcnlbaV0udHlwZSA9PSAwKXsKCQkJY2luID4+IHF1ZXJ5W2ldLlc7CgkJfWVsc2V7CgkJCWNpbiA+PiBxdWVyeVtpXS5pID4+IHF1ZXJ5W2ldLncgPj4gcXVlcnlbaV0udjsKCQkJaW1wb3J0YW50Wy0tcXVlcnlbaV0uaV0gPSB0cnVlOwoJCX0KCX0KCUMgPSBjb3VudChpbXBvcnRhbnQsaW1wb3J0YW50K04sdHJ1ZSk7IAoJc29ydChpdGVtLGl0ZW0rTixpc19pbXBvcnRhbnQpOwoJZm9yKGludCBpID0gMCA7IGkgPCBOIDsgaSsrKSBwb3NpdGlvbltpdGVtW2ldLm51bWJlcl0gPSBpOwoKCWZvcihpbnQgaSA9IDAgOyBpIDw9IE4gOyBpKyspIGZvcihpbnQgaiA9IDAgOyBqIDw9IHdNYXggOyBqKyspIGRwW2ldW2pdID0gLUlORjsKCWRwWzBdWzBdID0gMDsKCWZvcihpbnQgaSA9IDAgOyBpIDwgTiA7IGkrKyl7CgkJZm9yKGludCBqID0gMCA7IGogPD0gd01heCA7IGorKyl7CgkJCWRwW2krMV1bal0gPSBkcFtpXVtqXTsKCQkJaWYoaikgZHBbaSsxXVtqXSA9IG1heChkcFtpKzFdW2pdLGRwW2krMV1bai0xXSk7CgkJCWlmKGotaXRlbVtpXS53ZWlnaHQgPj0gMCl7CgkJCQlkcFtpKzFdW2pdID0gbWF4KGRwW2krMV1bal0sZHBbaV1bai1pdGVtW2ldLndlaWdodF0raXRlbVtpXS52YWx1ZSk7CgkJCX0KCQl9Cgl9Cglmb3IoaW50IHEgPSAwIDsgcSA8IFEgOyBxKyspewoJCWlmKHF1ZXJ5W3FdLnR5cGUgPT0gMCkgY291dCA8PCBkcFtOXVtxdWVyeVtxXS5XXSA8PCBlbmRsOwoJCWVsc2V7CgkJCWl0ZW1bcG9zaXRpb25bcXVlcnlbcV0uaV1dLndlaWdodCA9IHF1ZXJ5W3FdLncgOyAKCQkJaXRlbVtwb3NpdGlvbltxdWVyeVtxXS5pXV0udmFsdWUgID0gcXVlcnlbcV0udiA7CgkJCWZvcihpbnQgaSA9IE4tQyA7IGkgPCBOIDsgaSsrKXsKCQkJCWZvcihpbnQgaiA9IDAgOyBqIDw9IHdNYXggOyBqKyspewoJCQkJCWRwW2krMV1bal0gPSBkcFtpXVtqXTsKCQkJCQlpZihqKSBkcFtpKzFdW2pdID0gbWF4KGRwW2krMV1bal0sZHBbaSsxXVtqLTFdKTsKCQkJCQlpZihqLWl0ZW1baV0ud2VpZ2h0ID49IDApewoJCQkJCQlkcFtpKzFdW2pdID0gbWF4KGRwW2krMV1bal0sZHBbaV1bai1pdGVtW2ldLndlaWdodF0raXRlbVtpXS52YWx1ZSk7CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJfQoKfQ==