tab区切りとかなら
#include <stdio.h>
#include <string.h>
int main(void)
{char buff[256];
int i,j, man,day, n;
struct _list{ int key; char data[256]; }tbl[1000],tmp;
/* 見出しの分 */
for(i=0; i<3; ++i){
fgets(buff,sizeof(buff),stdin); printf("%s",buff);
}
/* dataの分 */
n=0;
while(fgets(buff,sizeof(buff),stdin)){
sscanf(buff,"%*s%*s%d%d",&man,&day);
tbl[n].key=(((3>=man)?1:0)*100+man)*100+day;
strcpy(tbl[n].data, buff);
++n;
}
for(i=0; i<n-1; ++i)
for(j=i+1; j<n; ++j)
if(tbl[i].key>tbl[j].key){
tmp=tbl[i]; tbl[i]=tbl[j]; tbl[j]=tmp;
}
for(i=0; i<n; ++i) printf("%s", tbl[i].data);
return 0;
}

実行プログラム < データテキスト > 出力ファイル って感じで