#include <bits/stdc++.h>
using namespace std;
int main() {
freopen("magic.in","r",stdin);
freopen("magic.out","w",stdout);
ios::sync_with_stdio(false);
cin.tie(0);
int n, m, Q;
cin >> n >> m >> Q;
vector<unordered_set<int>> s(n + 1);
for (int i = 1; i <= n; ++i) {
int x;
cin >> x;
unordered_set<int> t;
for (int j = 0; j < x; ++j) {
int v;
cin >> v;
t.insert(v);
}
s[i] = t;
}
long long ts = 0;
for (int x = 1; x <= m; ++x) ts += (long long)x * x;
const int MK = 19;
vector<vector<long long>> pre(n + 2, vector<long long>(MK + 1, 0));
for (int k = 1; k <= MK; ++k) {
for (int l = 1; l + k - 1 <= n; ++l) {
int r = l + k - 1;
unordered_set<int> u;
long long su = 0;
for (int i = l; i <= r; ++i) {
for (int x : s[i]) {
if (u.insert(x).second) {
su += (long long)x * x;
}
}
}
long long s0 = ts - su;
int mc = 1 << k;
vector<long long> f(mc, 0);
f[0] = s0;
for (int x : u) {
int ma = 0;
for (int j = 0; j < k; ++j) {
int c = l + j;
if (s[c].count(x)) {
ma |= (1 << j);
}
}
f[ma] += (long long)x * x;
}
long long mn = *min_element(f.begin(), f.end());
pre[l][k] = mn;
}
}
while (Q--) {
int l, r;
cin >> l >> r;
int k = r - l + 1;
if (k >= 20) {
cout << ts << '\n';
} else {
cout << ts - pre[l][k] << '\n';
}
}
return 0;
}