#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define fbo find_by_order
#define ook order_of_key
typedef long long ll;
typedef pair<ll,ll> ii;
typedef vector<int> vi;
typedef long double ld;
typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> pbds;
typedef set<int>::iterator sit;
typedef map<int,int>::iterator mit;
typedef vector<int>::iterator vit;
ll cost[11][11];
ll dist[100001][11];
vector<pair<ii,int> > adj[100001];
const ll INF = ll(1e18);
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0);
int n, m, k, s; cin >> n >> m >> k >> s; s--;
for(int i = 0; i < k; i++)
{
for(int j = 0; j < k; j++)
{
cin >> cost[i][j];
}
}
for(int i = 0; i < m; i++)
{
int u, v, w, l; cin>>u>>v>>w>>l;
u--; v--; l--;
adj[u].pb(mp(mp(v,w),l)); adj[v].pb(mp(mp(u,w),l));
}
priority_queue<pair<ii,int>, vector<pair<ii,int> >, greater<pair<ii,int> > > pq;
for(int i = 0; i < n; i++)
{
for(int j = 0; j < k; j++)
{
dist[i][j] = INF;
}
}
for(int i = 0; i < k; i++) dist[s][i] = 0;
pq.push(mp(mp(0,s),-1));
while(!pq.empty())
{
ll d = pq.top().fi.fi; int u = pq.top().fi.se; int c = pq.top().se; pq.pop();
for(int i = 0; i < adj[u].size(); i++)
{
int v = adj[u][i].fi.fi; ll w = adj[u][i].fi.se; int e = adj[u][i].se;
ll totd = d + w;
if(c != -1) totd += cost[c][e];
if(totd < dist[v][e])
{
dist[v][e] = totd;
pq.push(mp(mp(totd,v),e));
}
}
}
for(int i = 0; i < n; i++)
{
ll mincost = INF;
for(int j = 0; j < k; j++)
{
mincost = min(mincost, dist[i][j]);
}
if(mincost == INF) mincost = -1;
cout<<mincost<<' ';
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNpbmNsdWRlIDxleHQvcGJfZHMvYXNzb2NfY29udGFpbmVyLmhwcD4KI2luY2x1ZGUgPGV4dC9wYl9kcy90cmVlX3BvbGljeS5ocHA+CiAKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdXNpbmcgbmFtZXNwYWNlIF9fZ251X3BiZHM7CiAKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIG1wIG1ha2VfcGFpcgojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIGZibyBmaW5kX2J5X29yZGVyCiNkZWZpbmUgb29rIG9yZGVyX29mX2tleQogCnR5cGVkZWYgbG9uZyBsb25nIGxsOwp0eXBlZGVmIHBhaXI8bGwsbGw+IGlpOwp0eXBlZGVmIHZlY3RvcjxpbnQ+IHZpOwp0eXBlZGVmIGxvbmcgZG91YmxlIGxkOyAKdHlwZWRlZiB0cmVlPGludCwgbnVsbF90eXBlLCBsZXNzPGludD4sIHJiX3RyZWVfdGFnLCB0cmVlX29yZGVyX3N0YXRpc3RpY3Nfbm9kZV91cGRhdGU+IHBiZHM7CnR5cGVkZWYgc2V0PGludD46Oml0ZXJhdG9yIHNpdDsKdHlwZWRlZiBtYXA8aW50LGludD46Oml0ZXJhdG9yIG1pdDsKdHlwZWRlZiB2ZWN0b3I8aW50Pjo6aXRlcmF0b3Igdml0OwogCmxsIGNvc3RbMTFdWzExXTsKbGwgZGlzdFsxMDAwMDFdWzExXTsKdmVjdG9yPHBhaXI8aWksaW50PiA+IGFkalsxMDAwMDFdOwpjb25zdCBsbCBJTkYgPSBsbCgxZTE4KTsKaW50IG1haW4oKQp7Cglpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOwoJaW50IG4sIG0sIGssIHM7IGNpbiA+PiBuID4+IG0gPj4gayA+PiBzOyBzLS07Cglmb3IoaW50IGkgPSAwOyBpIDwgazsgaSsrKQoJewoJCWZvcihpbnQgaiA9IDA7IGogPCBrOyBqKyspCgkJewoJCQljaW4gPj4gY29zdFtpXVtqXTsKCQl9Cgl9Cglmb3IoaW50IGkgPSAwOyBpIDwgbTsgaSsrKQoJewoJCWludCB1LCB2LCB3LCBsOyBjaW4+PnU+PnY+Pnc+Pmw7CgkJdS0tOyB2LS07IGwtLTsKCQlhZGpbdV0ucGIobXAobXAodix3KSxsKSk7IGFkalt2XS5wYihtcChtcCh1LHcpLGwpKTsKCX0KCXByaW9yaXR5X3F1ZXVlPHBhaXI8aWksaW50PiwgdmVjdG9yPHBhaXI8aWksaW50PiA+LCBncmVhdGVyPHBhaXI8aWksaW50PiA+ID4gcHE7Cglmb3IoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQoJewoJCWZvcihpbnQgaiA9IDA7IGogPCBrOyBqKyspCgkJewoJCQlkaXN0W2ldW2pdID0gSU5GOwoJCX0KCX0KCWZvcihpbnQgaSA9IDA7IGkgPCBrOyBpKyspIGRpc3Rbc11baV0gPSAwOwoJcHEucHVzaChtcChtcCgwLHMpLC0xKSk7Cgl3aGlsZSghcHEuZW1wdHkoKSkKCXsJCgkJbGwgZCA9IHBxLnRvcCgpLmZpLmZpOyBpbnQgdSA9IHBxLnRvcCgpLmZpLnNlOyBpbnQgYyA9IHBxLnRvcCgpLnNlOyBwcS5wb3AoKTsKCQlmb3IoaW50IGkgPSAwOyBpIDwgYWRqW3VdLnNpemUoKTsgaSsrKQoJCXsKCQkJaW50IHYgPSBhZGpbdV1baV0uZmkuZmk7IGxsIHcgPSBhZGpbdV1baV0uZmkuc2U7IGludCBlID0gYWRqW3VdW2ldLnNlOwoJCQlsbCB0b3RkID0gZCArIHc7CgkJCWlmKGMgIT0gLTEpIHRvdGQgKz0gY29zdFtjXVtlXTsKCQkJaWYodG90ZCA8IGRpc3Rbdl1bZV0pCgkJCXsKCQkJCWRpc3Rbdl1bZV0gPSB0b3RkOwoJCQkJcHEucHVzaChtcChtcCh0b3RkLHYpLGUpKTsKCQkJfQoJCX0KCX0KCWZvcihpbnQgaSA9IDA7IGkgPCBuOyBpKyspCgl7CgkJbGwgbWluY29zdCA9IElORjsKCQlmb3IoaW50IGogPSAwOyBqIDwgazsgaisrKQoJCXsKCQkJbWluY29zdCA9IG1pbihtaW5jb3N0LCBkaXN0W2ldW2pdKTsKCQl9CgkJaWYobWluY29zdCA9PSBJTkYpIG1pbmNvc3QgPSAtMTsKCQljb3V0PDxtaW5jb3N0PDwnICc7Cgl9Cn0KIA==