#include<bits/stdc++.h>
#define int long long
using namespace std;
namespace work1 {
int a[500005], n, k, q, s[500005];
int U(int i, int j) {
return (i - 1) * n + j;
}
int main(int N, int K, int Q) {
n = N, k = K, q = Q;
for(int i = 1; i <= k; i++)
for(int j = 1; j <= n; j++) {
scanf("%lld", &a[U(i, j)]);
if(j != 1) s[U(i, j)] = s[U(i, j - 1)] + a[U(i, j)];
else s[U(i, j)] = a[U(i, j)];
}
while(q --) {
int l, r; scanf("%lld%lld", &l, &r);
int ans = -1;
for(int i = 1; i <= k; i++) {
int L = s[U(i, l - 1)], R = s[U(i, r)];
if(l - 1 == 0) L = 0; if(r == 0) R = 0;
ans = max(ans, R - L);
}
printf("%lld\n", ans);
}
}
}
namespace work2{
int a[500005], n, k, q, s[500005], Ans[1005][1005];
int U(int i, int j) {
return (i - 1) * n + j;
}
int main(int N, int K, int Q) {
n = N, k = K, q = Q;
for(int i = 1; i <= k; i++)
for(int j = 1; j <= n; j++) {
scanf("%lld", &a[U(i, j)]);
if(j != 1) s[U(i, j)] = s[U(i, j - 1)] + a[U(i, j)];
else s[U(i, j)] = a[U(i, j)];
}
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= i; j++) {
int maxi = -1e9;
for(int t = 1; t <= k; t++) {
int L = s[U(t, j - 1)], R = s[U(t, i)];
if(j - 1 == 0) L = 0;
maxi = max(maxi, R - L);
}
Ans[j][i] = maxi;
}
}
while(q--) {
int l, r; scanf("%lld%lld", &l, &r);
printf("%lld\n", Ans[l][r]);
}
}
}
signed main(){
int n, k, q; scanf("%lld%lld%lld", &n, &k, &q);
if(n > k) work1::main(n, k, q);
else work2::main(n, k, q);
}