#include <iostream>
#include <vector>
#include <bitset>
using namespace std;
int main() {
freopen("magic.in","r",stdin);
freopen("magic.out","w",stdout);
int n, m, q;
cin >> n >> m >> q;
// 预计算所有数字平方和
long long total = 0;
for (int x = 1; x <= m; x++) {
total += x * x;
}
vector<long long> sum_front(n + 1), sum_back(n + 1);
for (int i = 1; i <= n; i++) {
int k;
cin >> k;
long long s = 0;
for (int j = 0; j < k; j++) {
int x;
cin >> x;
s += (long long)x * x;
}
sum_front[i] = s;
sum_back[i] = total - s; // 反面数字的平方和
}
while (q--) {
int l, r;
cin >> l >> r;
if (l == r) {
// 单张卡片,取正面或反面的平方和较大者
cout << max(sum_front[l], sum_back[l]) << "\n";
} else {
// 多张卡片,可以通过翻转显示所有数字
cout << total << "\n";
}
}
return 0;
}