#include <bits/stdc++.h>
using namespace std;
int n,m,k;
int dis[208][208],dp[5010];
struct node
{
int t,idx;
bool operator < (const node& rhs) const {return t < rhs.t;}
}pigs[5008];
int main()
{
cin >> n >> m >> k;
memset(dis,0xc0c0c0c0,sizeof(dis));
for(int i = 1; i <= m; i++)
{
int u,v,w;
cin >> u >> v >> w;
dis[u][v] = dis[v][u] = w;
}
for(int i = 1; i <= n;i++)
{
dis[i][i] = 0;
}
for(int k = 1; k <= n; k++)
{
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= n; j++)
{
dis[i][j] = min(dis[i][j],dis[i][k] + dis[k][j]);
}
}
}
for(int i = 1; i <= k; i++)
{
int t,v;
cin >> t >> v;
pigs[i].t = t;
pigs[i].idx = v;
}
dp[0] = 0;
int ans = 0;
for(int i = 1; i <= k; i++)
{
for(int j = 0; j < i; j++)
{
if(dis[pigs[j].idx][pigs[i].idx] <= pigs[i].t - pigs[j].t)
{
dp[i] = max(dp[i],dp[j]+1);
}
}
ans = max(ans,dp[i]);
}
cout << ans;
return 0;
}