#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e5 + 10;
int n, m, q;
struct edge
{
int v; ll w;
edge(){}
edge(int v, ll w):v(v), w(w){}
};
vector<edge>Map[maxn];
ll sum[maxn];
int color[maxn];
//从u出发,当前距离为d,当前连通块编号为 now_color
void dfs(int u, ll d, int now_color)
{
color[u] = now_color;
sum[u] = d;
for(auto x : Map[u])
{
int v = x.v;
ll w = x.w;
if(color[v])continue;
dfs(v, d + w, now_color);
}
}
int main()
{
cin >> n >> m >> q;
for(int i = 1; i <= m; i++)
{
int l, r;
ll s;
cin >> l >> r >> s;
//建图
l--;
Map[l].push_back(edge(r, s));
Map[r].push_back(edge(l, -s));
}
int cnt = 0;//cnt表示连通块编号
//每个连通块直接dfs
for(int i = 0; i <= n; i++)if(color[i] == 0)
dfs(i, 0, ++cnt);
while(q--)
{
int l, r;
cin >> l >> r;
l--;
if(color[l] != color[r])cout<<"UNKNOWN"<<endl;
else cout<<sum[r] - sum[l]<<endl;
}
return 0;
}