#include using namespace std; #define int long long #define pii pair #define se second #define fi first const int N=1000005; int n,m,s,t; int w,ans,dis[N]; int tot=1,vis[N],pre[N],head[N],flag[2505][2505]; struct node{ int to,nxt,val; }e[N]; int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } void add(int u,int v,int w){ if(flag[u][v]==0){ e[++tot].to=v; e[tot].val=w; e[tot].nxt=head[u]; head[u]=tot; e[++tot].to=u; e[tot].val=0; e[tot].nxt=head[v]; head[v]=tot; flag[u][v]=tot; } else e[flag[u][v]-1].val+=w; } int bfs(){ memset(vis,0,sizeof(vis)); queueq; q.push(s); vis[s]=1; dis[s]=2100000000; while(!q.empty()){ int x=q.front(); q.pop(); for(int i=head[x];i;i=e[i].nxt){ if(e[i].val==0)continue; int v=e[i].to; if(vis[v]==1)continue; dis[v]=min(dis[x],e[i].val); pre[v]=i; q.push(v); vis[v]=1; if(v==t)return 1; } } return 0; } void dfs(){ int x=t; while(x!=s){ int v=pre[x]; e[v].val-=dis[t]; e[v^1].val+=dis[t]; x=e[v^1].to; } ans+=dis[t]; } struct kkk{ int v,p,q,w; }; vectora[N]; vectortt[N]; int cnt,d; signed main() { // freopen("travel.in","r",stdin); // freopen("travel.out","w",stdout); cin>>n>>m>>d; for(int i=1;i<=m;i++){ int x=read(); int v,p,q,w; cin>>v>>p>>q>>w; if(x!=n)a[x].push_back({v,p,q,w}); if(x!=n){ tt[x].push_back({cnt+1,cnt+2}); add(cnt+1,cnt+2,w); cnt+=2; } } for(int i=1;i=a[i][j].q+d){ add(tt[i][j].se,tt[a[i][j].v][k].fi,a[i][j].w); } } } } s=cnt+2; t=cnt+1; for(int j=0;j