#include<cstdio>
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
#define INF 1e+8
class Data {
public:
	int to,cost,num;
	Data(){}
	Data(int to, int cost, int num):to(to),cost(cost),num(num){}
	bool operator<(const Data &s) const {
		if(cost != s.cost) return cost > s.cost;
		return to < s.to;
	}
};

int main() {
	int c,n,m,s,g;
	while(scanf("%d%d%d%d%d",&c,&n,&m,&s,&g),(c|n|m|s|g)) {
		vector<Data> G[128];
		for(int i = 0; i < m; i++) {
			int a,b,f;
			scanf("%d%d%d",&a,&b,&f);
			G[a].push_back(Data(b,f,0));
			G[b].push_back(Data(a,f,0));
		}
		priority_queue<Data> Q;
		Q.push(Data(s,0,c));
		int ans = -1;
		while(!Q.empty()) {
			Data e = Q.top();Q.pop();
			int v = e.to;
			if(v == g) {
				ans = e.cost;
				break;
			}
			for(int i = 0; i < G[v].size(); i++) {
				Data E = G[v][i];
				if(e.num != 0) {
					Q.push(Data(E.to,E.cost/2 + e.cost,e.num-1));
				}
				Q.push(Data(E.to,E.cost + e.cost,e.num));
			}
		}
		printf("%d\n",ans);
	}
	return 0;
}