#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(i, n) for(int i = 1; i <= n; ++i)
#define forn(i, l, r) for(int i = l; i <= r; ++i)
#define ford(i, r, l) for(int i = r; i >= l; --i)
#define FOR(i, n) for(int i = 0; i < n; ++i)
#define fi first
#define se second
#define pii pair<int, int>
#define pll pair<ll, ll>
#define pb push_back
#define task "note"
#define endl "\n"
#define sz(a) int(a.size())
#define bit(i, mask) (mask >> i & 1)
#define all(a) (a).begin(), (a).end()
template<typename T> bool maximize(T &res, const T &val) { if (res <= val){ res = val; return true; }; return false; }
template<typename T> bool minimize(T &res, const T &val) { if (res >= val){ res = val; return true; }; return false; }
template<typename T> void printArr(T arr)
{
for(auto i : arr) cout << i << " ";
cout << endl;
}
const int N = 5e3 + 3;
const int S = 5e3 + 3;
int n, max_weight;
struct Knapsack
{
int dp_front[N][S + 1];
int dp_back[N][S + 1];
int w[N], v[N];
int cur_front = 0, cur_back = 0;
void addFront(int weight, int value)
{
++cur_front;
w[cur_front] = weight;
v[cur_front] = value;
// cout << "Debug: " << cur_front << endl;
// cout << weight << " " << value << endl;
assert(cur_front >= 0);
forn(j, 0, max_weight)
{
dp_front[cur_front][j] = dp_front[cur_front - 1][j];
if(j >= weight)
maximize(dp_front[cur_front][j],
dp_front[cur_front - 1][j - weight] + value);
}
}
void pop_back()
{
if(cur_back == 0)
{
cur_back = 0;
ford(i, cur_front, 1)
{
++cur_back;
forn(j, 0, max_weight)
{
dp_back[cur_back][j] = dp_back[cur_back - 1][j];
if(j >= w[i])
maximize(dp_back[cur_back][j],
dp_back[cur_back - 1][j - w[i]] + v[i]);
}
}
cur_front = 0;
}
cur_back--;
}
int get()
{
int res = 0;
// cout << cur_front << " " << cur_back << endl;
// cout << dp_front[cur_front][2] << endl;
assert(cur_front >= 0);
assert(cur_back >= 0);
forn(j, 0, max_weight)
maximize(res, dp_front[cur_front][j] + dp_back[cur_back][max_weight - j]);
return res;
}
} dq;
int w[N], v[N];
int q;
void solve()
{
cin >> n >> max_weight;
rep(i, n) cin >> w[i] >> v[i];
cin >> q;
vector<array<int, 3>> queries;
rep(i, q)
{
int l, r;
cin >> l >> r;
queries.push_back({l, r, i});
}
sort(all(queries));
vector<int> res(q + 1);
int r = 0;
int l = 1;
auto push = [&](int pos)
{
dq.addFront(w[pos], v[pos]);
};
auto pop = [&] ()
{
dq.pop_back();
};
for(auto &[lq, rq, id] : queries)
{
while(r < rq) push(++r);
while(l < lq) l++, pop();
// cout << lq << " " << rq << " " << id << endl;
// cout << l << " " << r << endl;
res[id] = dq.get();
}
rep(i, q) cout << res[i] << endl;
}
signed main()
{
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
// if(fopen(task".inp", "r"))
// {
// freopen(task".inp", "r", stdin);
// freopen(task".out", "w", stdout);
// }
int TC = 1;
while(TC--)
{
solve();
cout << endl;
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdHlwZWRlZiBsb25nIGxvbmcgbGw7CgojZGVmaW5lIHJlcChpLCBuKSBmb3IoaW50IGkgPSAxOyBpIDw9IG47ICsraSkKI2RlZmluZSBmb3JuKGksIGwsIHIpIGZvcihpbnQgaSA9IGw7IGkgPD0gcjsgKytpKQojZGVmaW5lIGZvcmQoaSwgciwgbCkgZm9yKGludCBpID0gcjsgaSA+PSBsOyAtLWkpCiNkZWZpbmUgRk9SKGksIG4pIGZvcihpbnQgaSA9IDA7IGkgPCBuOyArK2kpCiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBwaWkgcGFpcjxpbnQsIGludD4KI2RlZmluZSBwbGwgcGFpcjxsbCwgbGw+CiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgdGFzayAibm90ZSIKI2RlZmluZSBlbmRsICJcbiIKI2RlZmluZSBzeihhKSBpbnQoYS5zaXplKCkpCiNkZWZpbmUgYml0KGksIG1hc2spIChtYXNrID4+IGkgJiAxKQojZGVmaW5lIGFsbChhKSAoYSkuYmVnaW4oKSwgKGEpLmVuZCgpCgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIG1heGltaXplKFQgJnJlcywgY29uc3QgVCAmdmFsKSB7IGlmIChyZXMgPD0gdmFsKXsgcmVzID0gdmFsOyByZXR1cm4gdHJ1ZTsgfTsgcmV0dXJuIGZhbHNlOyB9CnRlbXBsYXRlPHR5cGVuYW1lIFQ+IGJvb2wgbWluaW1pemUoVCAmcmVzLCBjb25zdCBUICZ2YWwpIHsgaWYgKHJlcyA+PSB2YWwpeyByZXMgPSB2YWw7IHJldHVybiB0cnVlOyB9OyByZXR1cm4gZmFsc2U7IH0KdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBwcmludEFycihUIGFycikKewogICAgZm9yKGF1dG8gaSA6IGFycikgY291dCA8PCBpIDw8ICIgIjsKICAgIGNvdXQgPDwgZW5kbDsKfQpjb25zdCBpbnQgTiA9IDVlMyArIDM7CmNvbnN0IGludCBTID0gNWUzICsgMzsKaW50IG4sIG1heF93ZWlnaHQ7CnN0cnVjdCBLbmFwc2Fjawp7CiAgICBpbnQgZHBfZnJvbnRbTl1bUyArIDFdOwogICAgaW50IGRwX2JhY2tbTl1bUyArIDFdOwogICAgaW50IHdbTl0sIHZbTl07CiAgICBpbnQgY3VyX2Zyb250ID0gMCwgY3VyX2JhY2sgPSAwOwogICAgdm9pZCBhZGRGcm9udChpbnQgd2VpZ2h0LCBpbnQgdmFsdWUpCiAgICB7CiAgICAgICAgKytjdXJfZnJvbnQ7CiAgICAgICAgd1tjdXJfZnJvbnRdID0gd2VpZ2h0OwogICAgICAgIHZbY3VyX2Zyb250XSA9IHZhbHVlOwogICAgICAgIC8vIGNvdXQgPDwgIkRlYnVnOiAiIDw8IGN1cl9mcm9udCA8PCBlbmRsOwogICAgICAgIC8vIGNvdXQgPDwgd2VpZ2h0IDw8ICIgIiA8PCB2YWx1ZSA8PCBlbmRsOwogICAgICAgIGFzc2VydChjdXJfZnJvbnQgPj0gMCk7CiAgICAgICAgZm9ybihqLCAwLCBtYXhfd2VpZ2h0KQogICAgICAgIHsKICAgICAgICAgICAgZHBfZnJvbnRbY3VyX2Zyb250XVtqXSA9IGRwX2Zyb250W2N1cl9mcm9udCAtIDFdW2pdOwogICAgICAgICAgICBpZihqID49IHdlaWdodCkKICAgICAgICAgICAgICAgIG1heGltaXplKGRwX2Zyb250W2N1cl9mcm9udF1bal0sCiAgICAgICAgICAgICAgICAgICAgICAgICBkcF9mcm9udFtjdXJfZnJvbnQgLSAxXVtqIC0gd2VpZ2h0XSArIHZhbHVlKTsKICAgICAgICB9CiAgICB9CgogICAgdm9pZCBwb3BfYmFjaygpCiAgICB7CiAgICAgICAgaWYoY3VyX2JhY2sgPT0gMCkKICAgICAgICB7CiAgICAgICAgICAgIGN1cl9iYWNrID0gMDsKICAgICAgICAgICAgZm9yZChpLCBjdXJfZnJvbnQsIDEpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICsrY3VyX2JhY2s7CiAgICAgICAgICAgICAgICBmb3JuKGosIDAsIG1heF93ZWlnaHQpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgZHBfYmFja1tjdXJfYmFja11bal0gPSBkcF9iYWNrW2N1cl9iYWNrIC0gMV1bal07CiAgICAgICAgICAgICAgICAgICAgaWYoaiA+PSB3W2ldKQogICAgICAgICAgICAgICAgICAgICAgICBtYXhpbWl6ZShkcF9iYWNrW2N1cl9iYWNrXVtqXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcF9iYWNrW2N1cl9iYWNrIC0gMV1baiAtIHdbaV1dICsgdltpXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY3VyX2Zyb250ID0gMDsKICAgICAgICB9CiAgICAgICAgY3VyX2JhY2stLTsKICAgIH0KICAgIGludCBnZXQoKQogICAgewogICAgICAgIGludCByZXMgPSAwOwogICAgICAgIC8vIGNvdXQgPDwgY3VyX2Zyb250IDw8ICIgIiA8PCBjdXJfYmFjayA8PCBlbmRsOwogICAgICAgIC8vIGNvdXQgPDwgZHBfZnJvbnRbY3VyX2Zyb250XVsyXSA8PCBlbmRsOwogICAgICAgIGFzc2VydChjdXJfZnJvbnQgPj0gMCk7CiAgICAgICAgYXNzZXJ0KGN1cl9iYWNrID49IDApOwogICAgICAgIGZvcm4oaiwgMCwgbWF4X3dlaWdodCkKICAgICAgICAgICAgbWF4aW1pemUocmVzLCBkcF9mcm9udFtjdXJfZnJvbnRdW2pdICsgZHBfYmFja1tjdXJfYmFja11bbWF4X3dlaWdodCAtIGpdKTsKICAgICAgICByZXR1cm4gcmVzOwogICAgfQp9IGRxOwoKaW50IHdbTl0sIHZbTl07CmludCBxOwoKCgp2b2lkIHNvbHZlKCkKewogICAgY2luID4+IG4gPj4gbWF4X3dlaWdodDsKICAgIHJlcChpLCBuKSBjaW4gPj4gd1tpXSA+PiB2W2ldOwogICAgY2luID4+IHE7CiAgICB2ZWN0b3I8YXJyYXk8aW50LCAzPj4gcXVlcmllczsKICAgIHJlcChpLCBxKQogICAgewogICAgICAgIGludCBsLCByOwogICAgICAgIGNpbiA+PiBsID4+IHI7CiAgICAgICAgcXVlcmllcy5wdXNoX2JhY2soe2wsIHIsIGl9KTsKICAgIH0KICAgIHNvcnQoYWxsKHF1ZXJpZXMpKTsKICAgIHZlY3RvcjxpbnQ+IHJlcyhxICsgMSk7CiAgICBpbnQgciA9IDA7CiAgICBpbnQgbCA9IDE7CiAgICBhdXRvIHB1c2ggPSBbJl0oaW50IHBvcykKICAgIHsKICAgICAgICBkcS5hZGRGcm9udCh3W3Bvc10sIHZbcG9zXSk7CiAgICB9OwogICAgYXV0byBwb3AgPSBbJl0gKCkKICAgIHsKICAgICAgICBkcS5wb3BfYmFjaygpOwogICAgfTsKCiAgICBmb3IoYXV0byAmW2xxLCBycSwgaWRdIDogcXVlcmllcykKICAgIHsKICAgICAgICB3aGlsZShyIDwgcnEpIHB1c2goKytyKTsKICAgICAgICB3aGlsZShsIDwgbHEpIGwrKywgcG9wKCk7CiAgICAgICAgLy8gY291dCA8PCBscSA8PCAiICIgPDwgcnEgPDwgIiAiIDw8IGlkIDw8IGVuZGw7CiAgICAgICAgLy8gY291dCA8PCBsIDw8ICIgIiA8PCByIDw8IGVuZGw7CiAgICAgICAgcmVzW2lkXSA9IGRxLmdldCgpOwogICAgfQogICAgcmVwKGksIHEpIGNvdXQgPDwgcmVzW2ldIDw8IGVuZGw7Cn0KCnNpZ25lZCBtYWluKCkKewoKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKLy8gICAgaWYoZm9wZW4odGFzayIuaW5wIiwgInIiKSkKLy8gICAgewovLyAgICAgICAgZnJlb3Blbih0YXNrIi5pbnAiLCAiciIsIHN0ZGluKTsKLy8gICAgICAgIGZyZW9wZW4odGFzayIub3V0IiwgInciLCBzdGRvdXQpOwovLyAgICB9CiAgICBpbnQgVEMgPSAxOwoKICAgIHdoaWxlKFRDLS0pCiAgICB7CiAgICAgICAgc29sdmUoKTsKICAgICAgICBjb3V0IDw8IGVuZGw7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0K