#include<bits/stdc++.h>
using namespace std;
typedef pair<int, int> PII;
const int N = 505;
int e[N*N],ne[N*N],h[N],w[N*N],ww[N*N],idx;
int dist[N];
int xq[N] ;
bool st[N];
void add(int a,int b,int c,int d){
e[idx] = b;
w[idx] = c;
ww[idx] = d;
ne[idx] = h[a];
h[a]=idx++;
}
int main()
{
int bb,n,m,k;
scanf("%d%d%d%d",&bb,&n,&m,&k);
int a,b,c,d;
memset(h, -1, sizeof h);
for(int i=0;i<m;i++){
scanf("%d%d%d%d",&a,&b,&c,&d);
add(a, b, c, d);
add(b, a, c, d);
}
int x;
while(k--){
memset(dist,0x3f,sizeof dist) ;
memset(st, 0, sizeof st);
memset(xq, 0, sizeof xq);
int mx = 0;
vector<int> node;
cin>>x;
dist[x]=0;
priority_queue<PII,vector<PII> ,greater<PII>> pq ;
pq.push({0,x});
while(pq.size()){
PII cur = pq.top();
pq.pop();
if(st[cur.second]) continue;
st[cur.second]=true;
if(cur.second!=x)
node.push_back(cur.second);
int dis=cur.first;
for(int i=h[cur.second];i!=-1;i=ne[i]){
int j=e[i];
if(dist[j]>dist[cur.second]+w[i]&&dist[cur.second]+w[i]<=bb){
dist[j]=dist[cur.second]+w[i];
xq[j]+=ww[i];
mx = max(xq[j],mx);
pq.push({dist[j],j});
}else if(dist[j]==dist[cur.second] && dist[cur.second]+w[i]<=bb)
{
xq[j]=max(xq[j],xq[j]+ww[i]);
mx = max(xq[j],mx);
}
}
}
sort(node.begin(),node.end());
vector<int> eq;
if(node.size()){
for(int i=0;i<node.size();i++){
if(i==0) cout<<node[i];
else cout<<" "<<node[i];
if(xq[node[i]]==mx){
eq.push_back(node[i]);
}
}
cout<<endl;
sort(eq.begin(),eq.end());
for(int i=0;i<eq.size();i++){
if(i==0) cout<<eq[i];
else cout<<" "<<eq[i];
}
cout<<endl;
}else{
cout<<"T_T"<<endl;
}
}
}
#include<bits/stdc++.h>
using namespace std;
typedef pair<int, int> PII;
const int N = 505, M = 2e5 + 5;
int e[M], ne[M], h[N], w[M], ww[M], idx;
void add(int a,int b,int c,int d){
e[idx] = b;
w[idx] = c;
ww[idx] = d;
ne[idx] = h[a];
h[a]=idx++;
}
int mx;
int bb,n,m,k;
vector<int> node;
void djstl(int x){
vector<int> dist(n + 1, INT_MAX);
vector<int> xq(n + 1, 0);
vector<bool> st(n + 1, false);
dist[x]=0;
priority_queue<PII,vector<PII> ,greater<PII>> pq ;
pq.push({0,x});
while(pq.size()){
PII cur = pq.top();
pq.pop();
if(st[cur.second]) continue;
st[cur.second]=true;
if(cur.second!=x)
node.push_back(cur.second);
int dis=cur.first;
for(int i=h[cur.second];i!=-1;i=ne[i]){
int j=e[i];
if(dist[j]>dist[cur.second]+w[i]&&dist[cur.second]+w[i]<=bb){
dist[j]=dist[cur.second]+w[i];
xq[j]=xq[cur.second]+ww[i];
mx = max(xq[j],mx);
pq.push({dist[j],j});
}else if(dist[j]==dist[cur.second]+w[i]&&dist[cur.second]+w[i]<=bb){
xq[j]=max(ww[i]+xq[cur.second],xq[j]);
mx = max(xq[j],mx);
}
}
}
sort(node.begin(),node.end());
vector<int> eq;
if(node.size()){
for(int i=0;i<node.size();i++){
if(i==0) cout<<node[i];
else cout<<" "<<node[i];
if(xq[node[i]]==mx){
eq.push_back(node[i]);
}
}
cout<<endl;
sort(eq.begin(),eq.end());
for(int i=0;i<eq.size();i++){
if(i==0) cout<<eq[i];
else cout<<" "<<eq[i];
}
cout<<endl;
}else{
cout<<"T_T"<<endl;
}
}
int main()
{
scanf("%d%d%d%d",&bb,&n,&m,&k);
int a,b,c,d;
memset(h, -1, sizeof h);
for(int i=0;i<m;i++){
scanf("%d%d%d%d",&a,&b,&c,&d);
add(a, b, c, d);
add(b, a, c, d);
}
int x;
while(k--){
mx = 0;
cin>>x;
node.clear();
djstl(x);
}
}