#include <iostream>#include <cstdio>#include <cstring>#include <queue>#include <algorithm>using namespace std;typedef long long LL;#define INF (1<<30)const int N=10050;const LL mod=10000000000LL;int n,m,q;int head[N],tot;LL dp[2][N];int dis[N],ord[N];struct Edge{int v,w,pre;Edge(){}Edge(int a,int b,int c){v=a;w=b;pre=c;}}edge[N*10];void addEdge(int u,int v,int w){edge[tot]=Edge(v,w,head[u]);head[u]=tot++;}void spfa(){bool vis[N];memset(vis,0,sizeof(vis));dis[0]=0; vis[0]=1;queue<int> que;que.push(0);while(que.size()){int u=que.front(); que.pop(); vis[u]=0;for(int i=head[u];i!=-1;i=edge[i].pre){int v=edge[i].v,w=edge[i].w;if(dis[v]>dis[u]+w){dis[v]=dis[u]+w;if(!vis[v]){vis[v]=1;que.push(v);}}}}}bool cmp(int a,int b){return dis[a]<dis[b];}LL mult(LL a,LL b){LL tmp1=a%100000;LL tmp2=b%100000;return ((a/100000*tmp2+b/100000*tmp1)*100000+tmp1*tmp2)%mod;}int main(){while(scanf("%d%d%d",&n,&m,&q)!=EOF){tot=0;for(int i=0;i<n;i++){head[i]=-1;dp[0][i]=0,dp[1][i]=1;dis[i]=INF;ord[i]=i;}for(int i=0;i<m;i++){int u,v,w; scanf("%d%d%d",&u,&v,&w);addEdge(u,v,w); }spfa();sort(ord,ord+n,cmp);dp[0][0]=1;for(int i=0;i<n;i++){int u=ord[i];for(int j=head[u];j!=-1;j=edge[j].pre){int v=edge[j].v,w=edge[j].w;if(dis[v]==dis[u]+w) dp[0][v]=(dp[0][u]+dp[0][v])%mod;}}for(int i=n-1;i>=0;i--){int u=ord[i];for(int j=head[u];j!=-1;j=edge[j].pre){int v=edge[j].v,w=edge[j].w;if(dis[v]==dis[u]+w) dp[1][u]=(dp[1][u]+dp[1][v])%mod;}}for(int i=0;i<q;i++){int u; scanf("%d",&u);LL ans= dis[u]==INF?0LL:mult(dp[0][u],dp[1][u]);printf("%010lldn",ans);}}return 0;}


